1、复习socket网络连接
服务器:socket(),bind(),listen(),accept(),
客户端:socket(),connect(),
2、聊天流程
客户端1和客户端2之间聊天,只用进程的话,服务器只能把客户端1发的信息再发送给客户端1,不能实现客户端1和客户端2之间聊天
关键:服务器只知道acceptfdlinux 判断线程是否在运行,一个客户端对应一个acceptfd,所以只要让服务器知道要发给哪个acceptfd
对于移动公司来说,想要用业务,就得买移动的电话卡。手机号码对于运营商来说就是acceptfd
服务器需要知道哪个客户端对应的是4红旗linux操作系统,哪个客户端对应的是5,;以及客户端是否在线。关联客户端账号和fd
3、容器:map 通过唯一的key,关联数据
acceptfd不是唯一的,根据上线时间分配,但是账号是唯一的。所以用账号作为map的key值。昵称唯一就是为了服务器识别
map查找数据不需要循环遍历,直接通过key查找。
4、进程
进程间数据不共享linux 判断线程是否在运行,即使是全局变量,在进程间也是各自的数据
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号线程,随机跑进程,不确定每个进程跑多少次linux命令手册,每个进程跑多久,不确定跑进程的顺序,但是能保证所有线程都能跑完。
程序员灯塔