作者存档: nick - 第14页
分配得真是均匀
EPOLL和IOCP比较 (转)
EPOLL是半成品,IOCP是成品,底层机制一样,协议栈的状态检查不需要用户去查询,由作业系统来通知。
其实这是任何守护性逻辑高性能的基础机制。
但是EPOLL只是告诉你现在可以读和写,即协议栈的读写缓冲被初始化或重设(对于写,上次数据已经提交并写缓冲重设为空,对于读,栈议栈读缓冲已经开始接受数据。)
但是写和读的过程还是由用户来控制,系统只是告诉你已经为你准备好了和网络驱动对接好的读写的通道。如果某个通道的读写很慢,我们其实自己可以控制,比如要读8K字节,但经过x秒只读到几个字节,这说明这个通道很差,我们可以将这个IO通道从EPOLL中分离出来把它投递到一个阻塞的socket中,而不影响整个EPOLL的性能。所以EPOLL虽然是半成品,但用户有更高的控制权。
而对于IOCP,从名称就可以知道,系统不仅控制IO通道的状态,而且把读写操作都做完了才通知用户。对于读,系统已经把数据读好放在buffer中,其实相当于是RBF,对于写,已经是写出了n长度的字节,所以即使某个IO通道上的传输很慢,你也无法控制,因为当你收到通知时,系统已经是读好数据或写出数据。所以IOCP在用户的控制上没有灵活的空间。
但是由系统来做毕竟比普通的二流以下的程序员自己来控制性能普遍来说要更好一些。
在高性能服务器的开发中,采用一个非阻塞的IO模型配两三个阻塞的socket混合处理,是最合理的,因为在大量连接中总会有一些客户端传输很慢,对于非常慢的连接,EPOLL,IOCP还不如阻塞模型处理性能更好,即时读写速度是一样的,但阻塞模型简单,上下文切换和内存分配的开销比较少。所以把一些很慢的连接重新投递到阻塞的socket上而让EPOLL能有更多的机会去处理传输非常快的连接才是非阻塞的优势。相比来说,IOCP就不能这样做。
跨网段组播问题
最近工作上遇到一个需要udp组播推送消息的功能,网络配置上采用PIM-SM,稀疏模式。
用了许多网上的组播例程,同网段可以,不同网段都无法发送成功。当时RP上监听端已经建立了(*,G)的表项,
发送端无法建立起(S,G)。最后研究了下VLC的源码,在发送端加了AddSourceMemberShip的动作,
成功建立了组播通路。
按MSDN的说法,发送的时候是不需要有加入组播组的动作的,到底是不是这样,还是他们的PIM-SM配置有误,求解。。。
解决ubuntu 13.04下vmware9无法输入LicenseKey
64位ubuntu 13.04 装了Vmware Workstation 9,点击Enter License Key后无反应,
可以在Terminal输入:
/usr/lib/vmware/bin/vmware-vmx-debug –new-sn xxxxx-xxxxx-xxxxx-xxxxx-xxxxx
Mac下配置Git-TF来连接TFS2012
Git-TF是微软提供的让TFS Server支持Git的工具,但网上几乎没有文章来针对Mac OS下安装Git-TF的说明,Mac下配置Git-TF的操作步骤如下:
下载文件
下载后,解压缩文件到本地,本例中,解压缩到 /Users/[ME]/Git-Tf 目录,其中[ME]是当前登录用户名
添加环境变量
要在MAC中添加环境变量,保证能访问到Git-Tf的目录,参考如下步骤
打开Terminal命令行窗口,并进入用户根目录
cd ~/
验证 .profile 文件是否存在:
ls -la | grep “.profile”
如果文件没有找到,用命令行创建:
touch .profile
打开.profile问津,并编辑
open .profile
在文件底部添加如下代码,其中”/Users/[ME]/Git-Tf/”请修改为你的Git-Tf目录
export PATH=”/Applications/Xcode.app/Contents/Developer/usr/libexec/git-core/”:$PATH
export PATH=”/Users/[ME]/Git-Tf/”:$PATH
保存,并关闭文本编辑窗口,回到命令行窗口,输入如下命令行:
source .profile
获取项目
重新启动命令行窗口,输入如下命令测试,其中的 shanghai\liujunmin 请替换自己的TFS登录账号:
git tf clone http://pd-tfs2012:8080/tfs $/demo
Username:shanghai\liujunmin
Password:***********
如果要保存账号密码,可以用如下命令,其中的shanghai\liujunmin请替换自己的TFS登录账号:
git config git-tf.server.username “shanghai\liujunmin”
git config git-tf.server.password ***********
配置完成
试用后,发现Git-tf可以在XCode中进行Commit,但不能直接在XCode中Push,只能在命令行中调用Checkin命令去提交。









近期评论