1 / 23

进程间通讯 2 -- 架构平台部

进程间通讯 2 -- 架构平台部. 讲师: delexxie 日期: 2009 年 08 月 12 日. 自我简介. Delexxie 谢建东 架构平台部 接入平台中心 业务开发组 Storage 、 FTN 、 CDN. 课程简介. 进程间通讯: 消息队列、信号灯、共享内存,只能在单一机器上实现。 跨机器进程通讯: Socket 介绍基于 TCP/IP 网络的 Socket 跨机器进程通讯 介绍基于单机进程通讯的 UNIX Domain Socket 介绍同步、异步的概念. 目录. Socket 、 Domain Socket 概要介绍

tuvya
Download Presentation

进程间通讯 2 -- 架构平台部

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 进程间通讯2--架构平台部 讲师:delexxie 日期:2009年08月12日

  2. 自我简介 Delexxie 谢建东 架构平台部\接入平台中心\业务开发组 Storage、FTN、CDN

  3. 课程简介 • 进程间通讯:消息队列、信号灯、共享内存,只能在单一机器上实现。 • 跨机器进程通讯:Socket • 介绍基于TCP/IP 网络的Socket 跨机器进程通讯 • 介绍基于单机进程通讯的 UNIX Domain Socket • 介绍同步、异步的概念

  4. 目录 • Socket、Domain Socket 概要介绍 • Socket 关键API • Socket 一些系统设置 • Socket 使用流程 • Socket 简单应用 • UNIX Domain Socket 介绍 • UNIX Domain Socket 使用流程 • UNIX Domain Socket 简单应用 • 高级篇:“同步”、“异步”概念 • 作业 • 提问

  5. Socket、Domain Socket 概要介绍 • Socket 接口是网络接口的API,用来实现网络通讯,支持协议:TCP/IP、UDP/IP、IPX等 • 互联网的几乎所有的服务器,都是用Socket 开发的服务器,提供的服务: 如 apache • 在Socket的框架上发展出一种IPC机制,就是UNIX Domain Socket, 可以实现高效的单机进程间通讯,why?

  6. Socket 关键API int socket(int domain, int type, int protocol); int bind(int sockfd, struct sockaddr *sa, int addrlen); int connect(int sockfd, struct sockaddr *servaddr, int addrlen); int listen(int sockfd, int queue_length); int accept(int sockfd,struct sockaddr *addr,int *addrlen); int close(int sockfd); int shutdown(int sockfd, int how); int select(int numfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout); int epoll_create(int size); int epoll_ctl(int epfd, int op, int fd, struct epoll_event *event); int epoll_wait(int epfd, struct epoll_event * events, int maxevents, int timeout); int send(int s, const void *buf, int len, int flags); int recv(int s, void *buf, int len, int flags); int sendto(int s, const void *buf, int len, int flags, const struct sockaddr *to, int tolen); int recvfrom(int s,void *buf, int len, int flags, struct sockaddr *from, int *fromlen);

  7. Socket 一些系统设置 int setrlimit(int resource, const struct rlimit *rlim); ulimit /proc/sys/kernel/sem 建议设置:250 32000 100 128第一列,表示每个信号集中的最大信号量数目。第二列,表示系统范围内的最大信号量总数目。第三列,表示每个信号发生时的最大系统操作数目。第四列,表示系统范围内的最大信号集总数目。所以,(第一列)*(第四列)=(第二列) /proc/sys/kernel/shmall 表示在任何给定时刻,系统上可以使用的共享内存的总量(bytes)。 /proc/sys/kernel/shmmax 表示内核所允许的最大共享内存段的大小(bytes)。 /proc/sys/kernel/shmmni 表示用于整个系统的共享内存段的最大数目(个)。 /proc/sys/kernel/threads-max 表示内核所能使用的线程的最大数目。 /proc/sys/kernel/msgmax 表示从一个进程发送到另一个进程的消息的最大长度(bytes)。 /proc/sys/kernel/msgmnb 表示一个消息队列的最大长度(bytes) /proc/sys/kernel/msgmni 表示消息队列标识的最大数目,即系统范围内最大多少个消息队列。 /proc/sys/fs/file-max 表示可以分配的文件句柄的最大数目。 /proc/sys/net/core/rmem_default 表示接收套接字缓冲区大小的缺省值(以字节为单位)。 /proc/sys/net/core/rmem_max 表示接收套接字缓冲区大小的最大值(以字节为单位)。 /proc/sys/net/core/wmem_default 表示发送套接字缓冲区大小的缺省值(以字节为单位)。 /proc/sys/net/core/wmem_max 表示发送套接字缓冲区大小的最大值(以字节为单位)。 也可改动 /etc/sysctl.conf 这个文件,加入以下的语句:kernel.shmmax = 536870912kernel.shmmni = 4096kernel.shmall = 2097152kernel.sem = 250 32000 100 128fs.file-max = 65536

  8. Socket 使用流程 Server-TCP Client-TCP Server-UDP Client-UDP socket socket socket socket bind ip port bind bind ip port bind listen accept connect recvfrom sendto sendto recvfrom recv/send send/recv

  9. Socket 简单应用-Echo Server

  10. Socket 简单应用-Client

  11. UNIX Domain Socket 介绍 • socket API原本是为网络通讯设计的,但后来在socket的框架上发展出一种IPC机制,就是UNIX Domain Socket。 • 虽然网络socket也可用于同一台主机的进程间通讯(通过loopback地址127.0.0.1),但是UNIX Domain Socket用于IPC更有效率。 • 不需要经过网络协议栈,不需要打包拆包、计算校验和、维护序号和应答等,只是将应用层数据从一个进程拷贝到另一个进程。 • 这是因为,IPC机制本质上是可靠的通讯,而网络协议是为不可靠的通讯设计的。 参考:http://learn.akae.cn/media/ch37s04.html

  12. UNIX Domain Socket 介绍 • UNIX Domain Socket是全双工的,API接口语义丰富,相比其它IPC机制有明显的优越性,目前已成为使用最广泛的IPC机制,比如X Window服务器和GUI程序之间就是通过UNIX Domain Socket通讯的。 • 高级功能:可以用来进行进程间传递 fd (自学)

  13. UNIX Domain Socket 使用流程 Server Client socket socket bind file bind file listen accept connect recv/send send/recv

  14. UNIX Domain Socket 简单应用-Echo Server

  15. UNIX Domain Socket 简单应用-Client

  16. 高级篇:“同步”、“异步”通讯概念 • “同步通信”的意思是,当A发送完消息之后,开始等待B的回应,在B没有回应之前,A不能继续执行。 • “异步通信”的意思是,当A发送完消息之后,不等待B的回应,继续执行之后的程序,在将来的某个时刻,A再来检查是否收到B的回应。 • 能否举一些现实生活的例子?

  17. Socket 的同步、异步通讯 • 同步Socket 服务器:Socket 阻塞send、recv • 异步Socket 服务器:Socket 非阻塞send、recv,怎么使用呢? • 1万个连接,同时下载 1M 的数据包,如何提高性能,会碰到什么问题?

  18. Socket 的异步通讯 • Socket 设置非阻塞模式: intflags=fcntl(socket,F_GETFL,0); fcntl(socket,F_SETFL,flags|O_NONBLOCK); • send 1M 数据,会立即返回, 告诉你已经发送完了64k数据 • recv 1M 数据, 会立即返回,告诉你什么也没有收到,下次再收,收到 120 字节 ……

  19. Socket 的异步通讯 • 在单进程里,使用select、epoll 来管理和触发上万个连接。 • 所有事情,都在一个大循环里做。

  20. 课后作业 • 作业内容: • 1、实现一个Domain Socket 异步模式的 Echo 服务器 • 2、实现一个基于 IPC 的 Echo 服务器 • 3、用1k、10K、1M 的请求包,对比测试上面两个服务器性能:每秒处理能力、平均响应时间。 • 作业要求: • 1、作业1、2、3 每人独立完成。提交各自服务器代码、测试程序、测试报告。 • 2、每组内通过作业3,组内选出最强的服务器。 • 作业交付时间:2009年8月20日17点前。 • 作业邮件标题“【进程间通讯2】【第X组】”

  21. 推荐书目: 1、《UNIX环境高级编程》 作者:W.Richard Stevens,译者:尤晋元等,机械工业出版社。 2、《UNIX网络编程第二卷:进程间通信》 作者:W.Richard Stevens,译者:杨继张 清华大学出版社。 3、《UNIX网络编程(第3版)—第1卷 套接口API 》 作者:[美]W. Richard Stevens/ Bill Fenner/ Andrew M. Rudoff/ 译者: 杨继张 清华大学出版社 4、http://learn.akae.cn/media/index.html 《 Linux C编程一站式学习》

  22. Q&A

  23. 谢谢!

More Related