Linux相关问题整理

Posted 清水寺扫地僧

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux相关问题整理相关的知识,希望对你有一定的参考价值。


Linux能同时启动多少个线程

对于32-bit的Linux,一个进程的地址空间是4G,其中用户态能访问3G左右,而一个线程的默认栈(stack)大小是10M,所以一个进程大约最多能同时启动300个线程左右;


多线程是否可以提高并发度

  • 如果指的是“并发连接数”,不能(原因见下),(若是指并发处理数,则这是由CPU的核数决定的,与线程个数无关);
  • 假如单纯采用 thread per connection 的模型,那么并发连接数大约300,这远远低于基于事件的单线程程序所能轻松达到的并发连接数(几千上万,甚至几千万)。所谓“基于事件”,指的是用 I/O multiplexing event loop 的编程模型,又称 Reactor 模式;

多线程是否可以提高吞吐量

  • 对于计算密集型服务,不能;
  • 如果要在一个8核心的机器上压缩100个1G的文本文件,每个core的处理能力为200MB/s,那么
    ①每次启8个进程,一个进程压缩一个文件 与
    ②只启动1个进程(8个线程并发压缩一个文件)
    两种方式总耗时相当,但第二种方式能较快的拿到第一个压缩完的文件,因为线程间的通信开销更小;

多线程如何让I/O和计算重叠,降低迟延(latency)

  • 例:日志(logging),多个线程写日志,由于文件操作比较慢,服务线程会等在I/O上,让CPU空闲空闲,增加响应时间;
  • 解决办法:单独用一个logging线程负责写磁盘文件,通过BlockingQueue提供对外接口,别的线程要写日志的时候往队列一塞即可,这样服务线程的计算和logging线程的磁盘I/O就可以重叠;
  • 如果异步I/O成熟的话,可以用protator模式;

线程池大小如何选择

如果池中执行任务时,密集计算所占时间比重为P(0<P<=1),而系统一共有C个CPU,为了让C个CPU跑满而不过载,线程池的大小的经验公式T=C/P,即T*P=C(让CPU刚好跑满)

  • 假设C=8,P=0.5,线程池的任务有一半是计算,一半是I/O,那么T=16,也就是16个50%繁忙的线程能让8个CPU忙个不停;
  • 假设C=8,P=1.0,线程池的任务全是密集计算,只要8个活动线程就能让CPU饱和;

线程分类

  • I/O线程(这里特指网络I/O),也就是Reactor当中的reactor;
  • 计算线程,耗费CPU时间片;
  • 第三方使用线程,如logging,又比如database;

以上是关于Linux相关问题整理的主要内容,如果未能解决你的问题,请参考以下文章

这里给大家整理了一些Linux系统运维相关的面试题,有些问题没有标准答案,希望要去参加Linux运维面试的朋友,可以先思考下这些问题

linux相关命令整理

Linux知识盲区整理

Linux动态库相关知识整理

Linux服务器搭建相关教程链接整理

Linux中用户与组相关配置文件(整理)