进程间的通信方式以及多线程和多进程之间的区别 |
您所在的位置:网站首页 › 多线程和多进程的区别是什么 › 进程间的通信方式以及多线程和多进程之间的区别 |
一.两者区别
(1)多进程 进程是程序在计算机上的一次执行活动,即正在运行中的应用程序,通常称为进程。当你运行一个程序,你就启动了一个进程。每个进程都有自己独立的地址空间(内存空间),每当用户启动一个进程时,操作系统就会为该进程分配一个独立的内存空间,让应用程序在这个独立的内存空间中运行。 在同一个时间里,同一个计算机系统中如果允许两个或两个以上的进程处于运行状态,这便是多进程,也称多任务。现代的操作系统几乎都是多任务操作系统,能够同时管理多个进程的运行。 多任务带来的好处是明显的,比如你可以边听mp3边上网,与此同时甚至可以将下载的文档打印出来,而这些任务之间丝毫不会相互干扰。 1.数据是分开的,共享复杂,同步简单 2.占用内存多,切换复杂,CPU利用率低 3.创建销毁复杂,切换复杂,速度慢 4.编程简单,调试简单 5.进程间不会相互影响 6.适应于多核、多机分布 ;如果一台机器不够,扩展到多台机器比较简单(2)多线程 线程是一个轻量级的子进程,是最小的处理单元;是一个单独的执行路径。可以说:线程是进程的子集(部分),一个进程可能由多个线程组成。 线程是独立的。如果在一个线程中发生异常,则不会影响其他线程。它使用共享内存区域。 多线程是一种执行模型,它允许多个线程存在于进程的上下文中,以便它们独立执行但共享其进程资源。 1.多线程共享进程数据,共享简单,同步复杂 2.占用内存少,切换简单,CPU利用率高 3.创建销毁简单,切换简单,速度快 4.编程复杂,调试复杂 5.一个线程挂掉将导致整个进程挂掉 6.适应于多核分布 二.使用场景1)需要频繁创建和销毁的优先用线程。 实例:web 服务器,来一个任务建立一个线程,完了就销毁线程。要是用进程,创建和销毁的代价是很高的。 2)需要进行大量计算的优先使用线程。 所谓大量计算,当然就是要消耗很多 cpu,切换频繁了,这种情况线程是最合适的。实例:图像处理、算法处理 3)强相关的处理用线程,弱相关的处理用进程。 4)可能扩展到多机分布的用进程,多核分布的用线程。 5)都满足需求的情况下,用你最熟悉、最拿手的方式。 三.通信方式 (1)进程间的通信方式进程间通信(IPC,InterProcess Communication)是指在不同进程之间传播或交换信息。IPC的方式通常有管道(包括无名管道和命名管道)、消息队列、信号量、共享存储、Socket、Streams等。其中 Socket和Streams支持不同主机上的两个进程IPC。 1.管道( pipe ):管道是一种半双工的通信方式,数据只能单向流动,而且只能在具有亲缘关系的进程间使用。进程的亲缘关系通常是指父子进程关系。 2.有名管道 (namedpipe) : 有名管道也是半双工的通信方式,但是它允许无亲缘关系进程间的通信。 3.信号量(semophore ) : 信号量是一个计数器,可以用来控制多个进程对共享资源的访问。它常作为一种锁机制,防止某进程正在访问共享资源时,其他进程也来访问该资源。因此,主要作为进程间以及同一进程内不同线程之间的同步手段。 4.消息队列( messagequeue ) : 消息队列存放在内核中,并由消息队列标识符标识。消息队列克服了信号量传递信息少、管道只能承载无格式字节流以及缓冲区大小受限等缺点。 5.信号 (sinal ) : 信号是一种比较复杂的通信方式,用于通知接收进程某个事件已经发生。 6.共享内存(shared memory ) :共享内存就是映射一段能被其他进程所访问的内存,这段共享内存由一个进程创建,但多个进程都可以访问。共享内存是最快的通信 IPC 方式,它是针对其他进程间通信方式运行效率低而专门设计的。 7.套接字(socket ) : 套解字也是一种进程间通信机制,与其他通信机制不同的是,它可用于不同及其间的进程通信。 (2)线程间的通信方式 1.锁机制:包括互斥锁、条件变量、读写锁 a.互斥锁: 提供了以排他方式防止数据结构被并发修改。 b.读写锁: 允许多个线程同时读共享数据,而对写操作是互斥的。 c.条件变量: 可以以原子的方式阻塞进程,直到某个特定条件为真为止。对条件的测试是在互斥锁的保护下进行的。条件变量始终与互斥锁一起使用。 2.信号量机制(Semaphore):包括无名线程信号量和命名线程信号量. 3.信号机制(Signal) |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |