linux 线程

 

1、复习socket网络连接

服务器:socket(),bind(),listen(),accept(),

客户端:socket(),connect(),

2、聊天流程

客户端1和客户端2之间聊天,只用进程的话,服务器只能把客户端1发的信息再发送给客户端1,不能实现客户端1和客户端2之间聊天

关键:服务器只知道acceptfd,一个客户端对应一个acceptfd,所以只要让服务器知道要发给哪个acceptfd

对于移动公司来说,想要用业务,就得买移动的电话卡。手机号码对于运营商来说就是acceptfd

服务器需要知道哪个客户端对应的是4,哪个客户端对应的是5,;以及客户端是否在线。关联客户端账号和fd

3、容器:map <key,value> 通过唯一的key,关联数据

acceptfd不是唯一的,根据上线时间分配,但是账号是唯一的。所以用账号作为map的key值。昵称唯一就是为了服务器识别

map查找数据不需要循环遍历,直接通过key查找。

4、进程

进程间数据不共享,即使是全局变量,在进程间也是各自的数据

5、IPC通信中只有共享内存能够存下map容器。

6、网络环境

将网络环境中存储的数据传给各个进程后,各自进行操作。客户端1进程拿到acceptfd=6,但是在客户端1号进程中,它不认识acceptfd=6,代码拷贝,拷贝到的只有客户端1存在的环境。客户端3上线后,拷贝到的环境中已经有了客户端1、2

7、POSIX线程

1、了解什么是线程?

线程是一个进程内部的控制序列。一切进程都至少有一个线程。

2、进程和线程关系

进程内包含线程。包含n个,想几个就写几个(理论)。根据硬件限制

因为进程是资源分配的基本单位,线程是CPU调度的基本单位。

线程是进程内的一个分支执行路径,只是进程内的一部分逻辑片段,这个片段在完成一个完整内容。

食堂:进程;窗口:线程。窗口生意有区别,线程间互不影响,窗口1速度慢,不影响其他窗口的运行)  

8、CPU运行原理

1、时间片轮转。单位时间1ms内只运行一个进程,第一毫秒在0号线程,第1毫秒可能在2号线程,随机跑进程,不确定每个进程跑多少次,每个进程跑多久,不确定跑进程的顺序,但是能保证所有线程都能跑完。

posted @ 2022-01-12 22:57  代码改变世界11  阅读(54)  评论(0)    收藏  举报