- 博客(6)
- 收藏
- 关注
原创 POSIX API与网络协议栈
send, recv这些函数仅仅是把数据copy到内核当中或者从内核拿出来,这些函数调用和网络传输实际上是异步的。如下图所示,send发送多次交给协议栈后,有可能会发生将其合并成一个数据包发送的情况,而对方收到后也有可能一次读不完的情况,可能会分多次接收。一次全部接收或发送和多次接收或发送性能的差异其实不大。
2025-06-18 23:56:09
891
原创 网络编程:网络io多路复用select/poll/epoll
在这些系统里,很多 I/O 操作(包括网络 I/O 和文件 I/O)都通过文件描述符来进行。许多用于文件 I/O 的函数同样可以用于 socket 的 I/O 操作,因为 socket 也被抽象为文件描述符。类型的句柄,用于标识一个套接字,很多操作也是通过这个句柄来完成,虽然具体实现细节与 Unix/Linux 不同,但在概念上有相似之处。在处理多个 socket 或同时处理 socket 与其他 I/O 源(如文件)时,常使用多路复用技术,如。函数可以从 socket 文件描述符读取接收到的数据。
2025-06-13 22:55:18
629
原创 高性能组件:原子操作
原子操作(Atomic Operation)是指一个不可分割、不可中断的操作,一旦开始执行就会一直运行到结束,中间不会被其他操作或事件打断,也不会呈现出部分完成的状态。它的核心特性是“要么全做,要么不做”,确保操作的完整性和一致性。1.原子操作的核心特点操作在逻辑上是一个整体,无法被分解为更小的步骤。例如,对于一个变量的赋值x = 5 在某些场景下是原子的(如32位整数在32位CPU上的CPU上的赋值),但复杂操作(如x++)可能不是原子的(实际包含“读取”-修改-写入“三步)。
2025-05-05 16:48:30
1695
原创 池式组件:线程池
而线程池通过预先创建一定数量的线程,当有任务到来时,直接从线程池中获取空闲线程执行任务,任务完成后线程也不会被销毁,而是继续等待下一个任务,避免了频繁创建和销毁线程带来的资源浪费。线程池可以对线程进行集中管理和监控。例如,在一个 Web 服务器中,使用线程池处理客户端请求,即使在访问高峰期,也能通过线程池的管理机制,确保服务器不会因为线程过多而崩溃。当有新任务到来时,如果使用线程池,由于线程池中有预先创建好的空闲线程,任务可以立即分配给这些线程执行,无需等待线程创建的时间,从而显著提高了系统的响应速度。
2025-05-04 10:16:42
1338
原创 网络编程:高性能异步io机制-----io_uring(1)
而`liburing`库把这些系统调用封装成了更高级、更易于使用的函数,像io_uring_queue_init用于初始化io_uring实例,io_uring_get_sqe用于获取提交队列条目,io_uring_submit用于提交 I/O 请求等。io_uring就是为了解决这些问题而设计的,它的目标是提供一种更高效、更易用的异步 I/O 解决方案,减少系统调用次数,降低 CPU 开销,提高应用程序的 I/O 性能。例如,一些传统的网络服务器,如小型的 Web 服务器、聊天服务器等,使用。
2025-04-30 16:27:33
1869
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅