【每日英文】线程和进程和线程的区别(一)

每日英语

做你自己,不要为任何人改变。如果他们不喜欢最糟糕的你,那么他们就不配拥有最好的你。

勇敢做自己,不要为任何人改变。如果他们不能接受你最坏的一面,他们就不配得到你最好的一面。

每日心连心

这是一个复杂而不规则的世界。越想忘记,就越难忘记。

责任编辑:乐乐 | 来自:blog.csdn.net/liyue98/article/details/80112246

回顾过去:

文本

大家好,我叫小乐。进程和线程的区别:

对于一个进程来说,子进程是父进程的副本,从父进程那里获取父进程的数据空间、堆和栈的副本。

与进程相比,线程是更接近执行体的概念。它可以直接与同一进程中的其他线程共享数据,并且有自己的堆栈空间和独立的顺序。

它们的共同点:都可以提高程序的并发性,提高程序的效率和响应时间。线程和进程各有优缺点。线程执行开销相对较小,但不利于资源管理和保护,而进程则相反。同时,线程适合在 SMP 机器上运行,而进程可以跨机器迁移。

它们之间的根本区别在于,多进程中的每个进程都有自己的地址空间,而线程共享地址空间。所有其他的区别都是由于这种区别而产生的。例如:

速度。线程产生速度快、通信速度快、切换速度快,因为它们在同一个地址空间中。

线程资源利用率良好。

线程在使用公共变量或内存时需要同步机制,但进程不需要。

而他们沟通方式的不同,还是因为这个根本原因。

沟通方式之间的差异

由于这个根本原因,实际上只需要进程之间的通信。同一个进程的线程共享地址空间,所以不需要通信,但是为了保护共享的全局变量,应该做同步/互斥。

进程间的通信,无论是信号、管道还是共享内存,都是由操作系统保证的,是系统调用。

一、进程间通信管道(pipe):

管道是一种半双工通信方式。数据只能单向流动进程共享内存读写锁,只能在相关流程之间使用。进程的亲和性通常是指父子进程关系。

命名管道(namedpipe):

命名管道也是一种半双工通信方法,但它允许在不相关的进程之间进行通信。

信号量(信号量):

信号量是一个计数器,可用于控制多个进程对共享资源的访问。它通常用作锁定机制,以防止其他进程在某个进程正在访问共享资源时访问该资源。因此,它主要用作进程之间以及同一进程中不同线程之间的同步方法。

消息队列(messagequeue):

消息队列是消息的链表,存储在内核中并由消息队列标识符标识。消息队列克服了信令中信息量少、管道只能承载无格式字节流、缓冲区大小有限等缺点。

信号(信号):

信号是一种相对复杂的通信方法,用于通知接收进程有事件发生。

共享内存(共享内存):

共享内存就是映射一块可以被其他进程访问的内存。此共享内存由一个进程创建,但可以由多个进程访问。共享内存是最快的 IPC 方式,它是为其他进程间通信方法的低效率而设计的。常与其他通信机制结合使用,如信号二,实现进程间的同步和通信。

插座(插座):

套接字也是一种进程间通信机制。与其他通信机制不同进程共享内存读写锁,它可以用于不同的设备和进程间通信。

二、线程间的通信方式

锁定机制:包括互斥体、条件变量、读写锁

信号量:包括未命名线程信号量和命名线程信号量

信号机制(Signal):类似于进程间的信号处理

线程间通信的目的主要是为了线程同步,所以线程没有进程通信那样的数据交换的通信机制。

您还有什么要补充的吗?

PS:欢迎在留言区留下您的意见,共同探讨,共同进步。如果今天的文章给了你新的灵感,请分享给更多的人。

© 版权声明
THE END
喜欢就支持一下吧
点赞0
分享
评论 抢沙发

请登录后发表评论