进程与线程

面试遇到的问题,进程与线程有什么区别呢?
就我查到的资料而言,我的感觉是,进程与线程,就像施工队与工人。怎么讲呢?
一个施工队中有好多工人,一个进程底下可以有多个线程。
进程拥有资源,有堆内存,就像施工队有个大仓库。
但是真正工作的,运行在CPU上的,是线程,就像实际干活的是工人。而且线程拥有的资源很少,只有一个程序计数器,一组寄存器,外加栈(而这些,正是运行程序所必备的资源)。就像工人拿个安全帽,推个手推车就可以搬砖了。但是线程共享进程的资源,就像一个施工队中的所有工人,可以共用这个施工队的大仓库。
换进程开销大,换线程开销小。就像换施工队,你得回收仓库,但是换工人,你把他的安全帽手推车一收,就可以让他休息了。

实际来说,进程与线程的异同:

  1. 进程线程都可以并发进行。
  2. 进程拥有大量内存资源(堆),而线程值拥有少量资源,但是进程底下的线程一起共享进程的资源。
  3. 进程拥有大量资源,因此创建和撤销的开销大。而线程资源少,所以开销小。
  4. 进程通信借助操作系统,通信难。线程通信通过进程,较简单。
  5. 进程更加稳定安全(具体为什么不太了解)。

通信:

  • 进程通信有:匿名管道,有名管道,信号量,消息队列,信号,共享内存,套接字七种方式。
  1. 匿名管道与有名管道,其实是通过文件来实现,由一个文件描述符来指向管道。半双工。环形队列结构。匿名管道用于有亲缘关系的进程,默认创建好。有名管道用于不相关的进程,需要人工创建。
  2. 信号量其实是个计数器,计数器为0时禁止访问。
  3. 消息队列是个链表,放在内核中并由消息队列标识符标识。独立于进程存在。可以按消息的类型字段读取。
  4. 信号…………不懂。所有的描述都很朦胧……
  5. 共享内存,就是多个进程共享一段内存,有了一个平台进行交流。但是共享内存本省没有同步机制!需要程序员控制。
  6. 套接字,绑定端口,感觉走向了网络端,因此可以支持不同设备间进程的交流。
  • 线程通信有:事件,信号量,互斥量,临界区四种。
    互斥量是信号量的一种特殊情况。
    事件和临界区未知…………
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值