多线程和多进程的使用不同点分析

2021-10-08 14:58:30 浏览数 (1)

1)需要频繁创建销毁的优先用线程。

实例:web服务器。来一个建立一个线程,断了就销毁线程。要是用进程,创建和销毁的代价是很难承受的。

2)需要进行大量计算的优先使用线程。

所谓大量计算,当然就是要消耗很多cpu资源,为最大限度利用cpu,并且交换数据方便,这种情况选线程是最合适的。

实例:图像处理、算法处理

3)强相关的处理用线程,弱相关的处理用进程。

什么叫强相关、弱相关?理论上很难定义,给个简单的例子就明白了。

一般的server需要完成如下任务:消息收发和消息处理。消息收发和消息处理就是弱相关的任务,而消息处理里面可能又分为消息解码、业务处理,这两个任务相对来说相关性就要强多了。因此消息收发和消息处理可以分进程设计,消息解码和业务处理可以分线程设计。

4)可能扩展到多机分布的用进程,多核分布的用线程。

5)都满足需求的情况下,用你最熟悉、最拿手的方式。

  1. 一个程序至少有一个进程,一个进程至少有一个线程。
  2. 一个线程可以创建和销毁另一个线程;同一个进程中的多个线程之间可以并发执行。
  3. 每个独立的进程有一个程序运行的入口、顺序执行序列和程序的出口。但是线程不能够独立执行,必须依存在进程中,同样由内核调度。

linux下进程间通信IPC的几种主要手段简介

  • 管道(Pipe)及有名管道(named pipe):管道可用于具有亲缘关系进程间的通信,有名管道克服了管道没有名字的限制,因此,除具有管道所具有的功能外,它还允许无亲缘关系进程间的通信;
  • 信号(Signal):信号是比较复杂的通信方式,用于通知接受进程有某种事件发生,除了用于进程间通信外,进程还可以发送信号给进程本身;
  • 报文队列(消息队列):消息队列是消息的链接表,包括Posix消息队列,system V消息队列。有足够权限的进程可以向队列中添加消息,被赋予读权限的进程则可以读走队列中的消息。消息队列克服了信号承载信息量少,管道只能承载无格式字节流以及缓冲区大小受限等缺点。
  • 共享内存:使得多个进程可以访问同一块内存空间,是最快的可用IPC形式。是针对其他通信机制运行效率较低而设计的。往往与其它通信机制,如信号量结合使用,来达到进程间的同步及互斥。
  • 信号量(semaphore):主要作为进程间以及同一进程不同线程之间的同步手段。
  • 套接口(Socket):更为一般的进程间通信机制,可用于不同机器之间的进程间通信。

Chrome浏览器: 采用独立进程设计,浏览器、标签页、插件和扩展都是独立进程,所以Chrome内核浏览器即使网页崩溃,其他功能都可以正常使用,整个浏览器也不会受到影响。为了安全、稳定、性能。

1、浏览器主进程 2、渲染进程:对页面的HTML、JavaScript和CSS等部分内容进行渲染,一般一个进程渲染一个站点的多个标签页 3、插件进程:浏览器中如AdobeFlash Player等插件的进程 4、扩展进程:各种用户自己添加的扩展程序,比如比较出名的Adblock Plus

多进程需要面对的问题包括:

  1. 内存占用大,因为无法像多线程模型共享公共的内存开销,比如使用的库,或者某些全局的数据缓存等。
  2. 进程间通讯的成本大。特别是使用共享内存交换数据的成本。
  3. 进程启动的开销大。

0 人点赞