当前位置: 首页操作系统面试题正文 为什么有了进程,还要有线程呢? 操作系统面试题 6 14.3K 进程可以使多个程序并发执行,以提高资源的利用率和系统的吞吐量,但是其带来了一些缺点: 进程在同一时间只能干一件事情; 进程在执行的过程中如果阻塞,整个进程就会被挂起,即使进程中有些工作不依赖与等待的资源,仍然不会执行。 基于以上的缺点,操作系统引入了比进程粒度更小的线程,作为并发执行的基本单位,从而减少程序在并发执行时所付出的时间和空间开销,提高并发性能。 操作系统面试题 帅地永久会员 打赏 收藏 海报挣佣金 推广链接
评论(8)
多进程依然会存在问题:
进程之间如何通信,共享数据?
维护进程的系统开销较大,如创建进程时,分配资源、建立 PCB;终止进程时,回收资源、撤销 PCB;进程切换时,保存当前进程的状态信息;
其实是因为进程间通信很麻烦,共享资源非常麻烦,所以才开线程来共享堆这些资源更加方便
一个进程中的线程不是只能与本线程资源共享吗?其他的进程还是共享不了呀
进程在同一时间只能干一件事情,那线程在同一时间不是也只能干一件事情吗?有点不懂
一个程序启动,等价于一个进程启动,也就是说,一个程序只有是一个进程,而可以有多个线程,因为一个进程里面可以包含多个现场
比如,你在使用word,实际上是打开了多个线程。
这些线程一个负责显示,一个接收输入,一个定时进行存盘。这些线程一起运转,让我们感觉到输入和显示
同时发生,而不用键入一些字符,等待一会儿才显示到屏幕上。
第3里说进程是并发执行的单位,这里说线程是并发执行的基本单位,感觉好像有点容易混淆?
怎么说呢,在有一些语言中,例如 PHP,其实没有线程的概念,这个时候只有进程,那么并发必须是多进程了。
在 Java 中,有线程的概念,那么一个进程里可以有多个线程去并发。这个时候相当于,线程是进程的一个实体,就像 类 和实例一样。
在 Go 语言里,有协程的概念(比线程力度更小),相当于多个协程可以由一个线程来执行。
不知道你能不能明白我说的意思,我觉得你理解进程,线程,协程的本质是最重要的,那些基本单位,最小单位,执行单位,感觉没必要抠的那么细。