网络和操作系统面试相关内容~(一) - Go语言中文社区

网络和操作系统面试相关内容~(一)


原文地址:网络和操作系统面试相关内容~(一)

1、进程和线程的区别?

  1. 调度:进程是资源管理的基本单位,线程是程序执行的基本单位。

  2. 切换:线程上下文切换要比进程上下文切换要快。

  3. 拥有资源:进程是拥有资源的一个独立单位,线程不拥有系统资源,但可访问隶属于进程的资源。

  4. 系统开销:创建或撤销进程时,系统都要为之分配或回收系统资源,如内存空间、I/O设备等,OS所付出的开销显著大于在创建或撤销线程时的开销,进程切换的开销也远大于线程切换的开销。

2、协程与线程的区别?

  1. 线程和进程都是同步机制,协程是异步机制。

  2. 线程是抢占式的,而协程是非抢占式的,需要用户释放使用权切换到其它协程,因此,同一时间只有一个协程有运行权,相当于单线程的能力。

  3. 一个线程可有多个协程,一个进程也可有多个协程。

  4. 协程不被操作系统内核管理,完全由程序控制,线程是被分割的CPU资源,协程是组织好的代码流程,线程是协程的资源,但协程不会直接使用线程,协程利用的是执行器关联任意线程或线程池。

  5. 协程保留上次调用时的状态。

3、并发和并行有何区别?

并发就是一段时间内多个任务都会被处理,但在某一时刻,只有一个任务在执行,单核处理器可做到并发,如有两个进程A和B,A运行一段时间后切到B,B运行一段时间后又切到A,因其切换速度足够快,所以宏观上表现为一段时间内可同时运行多个程序。

并行指的是同一时刻有多个任务在执行,这需要多核处理器来实现,在微观上就可同时执行多条指令,不同的程序放到不同的内核上去执行,是物理上的多个程序同时执行。

4、进程与线程的切换流程?

进程的切换分为两步,首先就是切换页表以使用新的地址空间,一旦去切换上下文,处理器中已缓存的内存地址一瞬间都作废了。

第二步就是切换内核栈和硬件上下文。

对Linux来说,线程和进程的最大区别在于地址空间,对于线程的切换,第一步是不需要做的,第二步就是线程和进程切换都要做的。

因为每个进程都有自己虚拟的地址空间,而线程是共享所在进程的虚拟地址空间,因此在同一进程中的线程切换时不涉及虚拟地址空间的转换。

5、虚拟地址空间的转换比较耗时?

进程都有自己的虚拟地址空间,将虚拟地址转换为物理地址需要查找页表,页表查找是一个很慢的过程,因此通常使用cache也就是TLB(translation Lookaside buffer,TLB本质上就是一个cache,用以加速页表查找)。

由于每个进程都有自己的虚拟地址空间,显然也都有自己的页表,当进程切换后,页表也需要进行切换,页表切换后TLB就失效了,cache失效致使命中率降低,那虚拟地址转换为物理地址就会变慢,表现出来的现象也就是程序运行变慢,而线程切换则不会导致TLB失效,因为线程无序切换地址空间,因此常说线程切换要比进程切换快。

至此,本次分享就结束了,后期会慢慢补充的。

以上仅为个人观点,不一定准确,能帮到各位那是最好的。

好啦,到这里本文就结束了,喜欢的话就来个三连击吧。

扫码关注公众号,获取更多优质内容。

  

版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/luyaran/article/details/121552921
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。
  • 发表于 2021-12-11 17:35:53
  • 阅读 ( 1963 )
  • 分类:面试题

0 条评论

请先 登录 后评论

官方社群

GO教程

推荐文章

猜你喜欢