Linux开发

Linux开发


1 进程和线程

1.1 进程和线程的区别
  • 进程是资源分配的最小单位;线程是程序执行的最小单位,也是处理器调度的基本单位。
  • 进程有自己的独立地址空间,每启动一个进程,系统就会为它分配地址空间,建立数据表来维护代码段、堆栈段和数据段;线程则共享进程中的数据;因此,CPU切换和创建一个线程的开销比进程小很多。
  • 进程间通信要以IPC方式进行;线程间通信更方便,同一进程下的线程共享全局变量、静态变量等数据。
  • 每个独立进程有一个程序运行的入口;线程不能独立执行,必须依存在应用程序中。

优缺点:

进程执行开销大,但能很好的进行资源管理和保护;线程执行开销小,但不利于资源管理和保护。

1.2 进程间通信的方式及其优缺点

管道:一种半双工的通信方式,数据只能单向流动,且只能在具有亲缘关系的进程间使用。使用简单方便;只

有名管道(FIFO):一种半双工的通信方式,但允许无亲缘关系的进程间通信。长期存于系统中,使用不当易出错,缓冲区有限。

信号量:一个计数器,可以用来控制多个线程对共享资源的访问。它不用于交换大批数据, 而用于进程间以及同一个进程内不同线程之间的同步手段。缺点:信号量有限。

消息队列:消息的链表,存放在内核中并由消息队列标识符标识,可以实现任意进程间的通信,并通过系统调用函数来实现消息发送和接收之间的同步,无需考虑同步问题,方便。缺点:信息的复制需要额外消耗CPU的时间,不适宜于信息量大或操作频繁的场合。

共享内存:映射一段能被其他进程所访问的内存,这段共享内存由一个进程创建,但多个进程都可以访问,共享内存是最快的IPC方式, 数据的共享使进程间的数据不用传送,而是直接访问内存,加快了程序的效率。共享内存没有提供同步的机制。

1.3 信号量与互斥锁的区别
  • 互斥量用于线程的互斥,信号量用于线程的同步。互斥是指某一资源同时只允许一个访问者对其进行访问,具有唯一性和排它性。但互斥无法限制访问者对资源的访问顺序,即访问是无序的。同步是指在互斥的基础上(大多数情况),通过其它机制实现访问者对资源的有序访问。在大多数情况下,同步已经实现了互斥,特别是所有写入资源的情况必定是互斥的。少数情况是指可以允许多个访问者同时访问资源。
  • 互斥量值只能为0/1,信号量值可以为非负整数。也就是说,一个互斥量只能用于一个资源的互斥访问,它不能实现多个资源的多线程互斥问题。
  • 互斥量的加锁和解锁必须由同一线程分别对应使用,信号量可以由一个线程释放,另一个线程得到。

2 网络编程

2.1 TCP和UDP的区别
  • TCP面向连接;UDP是无连接的,即发送数据前无需建立连接。
  • TCP提供可靠的服务,通过校验和,丢包时的重传控制,序号标识,滑动窗口、确认应答,次序乱掉的分包进行顺序控制实现可靠传输,通过TCP连接传送的数据无差错、不丢失、不重复且按序到达;UDP不保证可靠交付。
  • UDP具有较好的实时性,工作效率高,适用于对高速传输和实时性有较高要求的通信场景。
  • TCP连接只能是点到点的;UDP支持一对一、一对多、多对一和多对多的交互通信方式。
    CP连接只能是点到点的;UDP支持一对一、一对多、多对一和多对多的交互通信方式。
  • TCP对系统资源要求较多,UDP对系统资源要求较少。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值