阻塞和非阻塞
阻塞函数
socket默认是阻塞的,cin,cout
必须到等待的事情发生,才能继续执行,否则就会一直等待
特点
老王把水壶放在炉子上,一直在旁边等待
优点
CPU占用率低,等待的事情发生时,第一时间相应
非阻塞函数
特点
老王把水壶放在炉子上,去做了其他的事情,每隔一段时间,回来看一看水开没开
缺点
CPU占用率非常高,等待的事情发生时,不会第一时间知道
举例
操作系统会给每个进程分配4G的虚拟内存
(1.内存大小虚拟 2.取地址的地址是虚拟的,是映射地址,不真实对应内存条的地址)
内核空间:0~2G
用户空间:2~4G 独享的 代码里定义的变量空间recvBuf,sendBuf
创建socket时,一个socket对应内核空间里操作系统分配的两个缓冲区,接收缓冲区和发送缓冲区
操作系统接收到数据后,会根据端口号找到绑定的socket,把数据写入到socket对应的接收缓冲区里
程序调用recvfrom函数时,把使用的socket对应的接收缓冲区的数据拷贝到用户空间recvBuf里
程序调用sendto函数时,把自己空间的数据从sendbuf向使用的soc