社区
Linux_Kernel
帖子详情
底层socket数据收发是单线程的吧?
charles_great
2020-07-17 05:22:05
业务多线程针对不同连接send、recv处理socket数据的时候(业务收发并发),内核处理还是串行的吧?
...全文
16210
3
打赏
收藏
底层socket数据收发是单线程的吧?
业务多线程针对不同连接send、recv处理socket数据的时候(业务收发并发),内核处理还是串行的吧?
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
3 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
superwiles
2020-08-04
打赏
举报
回复
这个影响的因素很多, 主要要看 网卡是不是 multi queue, 如果是 multi queue, 那么 IO就并不是串行的, 还要看是不是打开了RFS etc 整个协议栈向上过程中 还会有很多 queue,要来竞争锁。
weiwei11234567890
2021-09-08
举报
回复
@superwiles
补充一下,multi queue这个也要看下是不是多核cpu,如果是单核那还是串行..
山椒π
2020-07-17
打赏
举报
回复
是,单个网卡会卡在IO处,因为时间短所以看似并行
用C实现的
socket
程序(多线程)
做项目时编写的
socket
网络程序,希望能做为大家的学习有帮助!
为什么Redis是
单线程
?为什么能处理大并发量?(举例不错)
一、Redis为什么是
单线程
注意:redis
单线程
指的是网络请求模块使用了一个线程,即一个线程处理所有网络请求,其他模块仍用了多个线程。 因为CPU不是Redis的瓶颈。Redis的瓶颈最有可能是机器内存或者网络带宽,既然
单线程
容易实现,而且CPU不会成为瓶颈,那就顺理成章地采用
单线程
的方案了。关于redis的性能,官方网站也有,普通笔记本轻松处理每秒几十万的请求 二、Redis为什么这么...
socket
是并发安全的吗?
1. 多线程并发读/写同一个TCP
socket
是线程安全的,因为TCP
socket
的读/写操作都上锁了。虽然线程安全,但依然不建议你这么做,因为TCP本身是基于
数据
流的协议,一份完整的消息
数据
可能会分开多次去写/读,内核的锁只保证单次读/写
socket
是线程安全,锁的粒度并不覆盖整个完整消息。因此建议用一个线程去读/写TCP
socket
。2. 多线程并发读/写同一个UDP
socket
也是线程安全的,因为UDP
socket
的读/写操作也都上锁了。
Redis
单线程
VS 多线程
主要是指Redis的网络IO的键值对读写是由一个线程来完成的,Redis在处理客户端的请求时包括获取(
socket
读)、解析执行内容返回(
socket
写)等都由一个顺序串行的主线程处理,这就是所谓的“
单线程
”。这也是 Redis对外提供键值存储服务的主要流程。但是Redis的其他功能,比如持久化RDB、AOF、异步删除、集群
数据
同步等,其实是由额外的线程执行。Redis命令工作线程是
单线程
的,但是,整个Redis来说是多线程的。
为什么Redis是
单线程
?为什么能处理大并发量?
一、Redis为什么是
单线程
注意:redis
单线程
指的是网络请求模块使用了一个线程,即一个线程处理所有网络请求,其他模块仍用了多个线程。 因为CPU不是Redis的瓶颈。Redis的瓶颈最有可能是机器内存或者网络带宽,既然
单线程
容易实现,而且CPU不会成为瓶颈,那就顺理成章地采用
单线程
的方案了。关于redis的性能,官方网站也有,普通笔记本轻松处理每秒几十万的请求 二、Redis为什么这...
Linux_Kernel
4,465
社区成员
17,462
社区内容
发帖
与我相关
我的任务
Linux_Kernel
Linux/Unix社区 内核源代码研究区
复制链接
扫一扫
分享
社区描述
Linux/Unix社区 内核源代码研究区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章