大家好,今天小编关注到一个比较有意思的话题,就是关于linux管道编程教程的问题,于是小编就整理了1个相关介绍linux管道编程教程的解答,让我们一起看看吧。

  1. linux下的多进程和多线程,他们分别有什么作用?

linux下的多进程和多线程,他们分别有什么作用?

首先,Linux多线程和多进程的作用其实作用都差不多,主要是为了完成并发任务。

linux管道编程教程-管道 linux
(图片来源网络,侵删)

其次,我们再来看看什么是进程,什么是线程,以及它们之间的关系。

线程是执行体,用来执行我们写的代码或指令,多个线程可以同时执行。

linux管道编程教程-管道 linux
(图片来源网络,侵删)

进程是容器,包含了线程执行所需要的一切系统***,线程只能在进程空间中执行,进程中可以包含多个执行线程,但只有一个主线程,我们代码中包含main函数的线程也就是进程中的主线程。

进程本身是不活跃的,在Linux中,如果进程中的所有执行线程都已经退出,而父进程没有捕获子进程结束的信号,此时该进程则会变为僵尸进程,该进程不占CPU时间,但会占据系统***,如果大量存在,必定会导致系统***被耗尽,导致死机。

linux管道编程教程-管道 linux
(图片来源网络,侵删)

通俗的比喻就是,操作系统就像一个手工作坊,进程就相当于作坊中一个个独立的工作车间,而线程就相当于车间中真正劳作的工人,没有工人的车间是无法进行生产的。

进程空间之间彼此隔离,可以说互不影响,就相当于上述手工作坊中的两个车间中都有个叫张三的人,但其中一个因为上班时间玩手机被老板开除了,而另一个车间中的张三却不会受到任何影响。(当然,这不是绝对的,Linux子进程会在创建初期共享父进程的进程空间,而vfork系统调用会导致这种共享一直存在,导致父进程中的变量修改会影响子进程数据,而fork则***用写时拷贝技术来避免了这个问题)。

由于进程的这种隔离性,进程之间共享数据和通信也变得麻烦许多,一般的技术手段就是管道,POSIX信号,System V信号,共享内存,Socket网路通信等等。

线程之间也没有进程那么麻烦,它们是共享整个进程空间的,这就像车间里要开小组会议,一个人发言的时候大家都能听到,但这又造成了另一个问题,毕竟一个车间十来号人,难免人多嘴杂,怎么保证一个人发言的中途没人插嘴呢,这就是线程同步的问题,一般的技术手段就是信号量,互斥锁,读写锁,文件锁等等。

当然,多线程中同步的问题在多进程中依然会遇到,解决办法自然也就和多线程差不多。

到此,以上就是小编对于linux管道编程教程的问题就介绍到这了,希望介绍关于linux管道编程教程的1点解答对大家有用。