分配得真是均匀
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
高考满分作文–感觉空洞了一些
遗失的童真
当暮霭沉沉之时,我们被劝说要相信楚天辽阔;当草长莺飞之时,我们被劝说要防备前方蜀道之难;当我们成长到每一个阶段时,我们都被提醒着完成不合时宜的任务。于是,童真就如那风铃,渐行渐远,消逝不见。
“孩子从卖气球的人手中牵走一个心愿”,多么可爱而美好的诗句,甚至可以想象那洋溢着灿烂的笑脸。而如今这样的笑脸在冰封冻结。本该童真的年纪,却一脸愁苦,为学业奔波。我们不应抱怨现在的孩子为何圆滑世故,我们应反省是什么造成了童真的遗失,又是什么加剧了这种遗失的势头。
反观社会,我们清醒地看到一个充满竞争意识,强调优胜劣汰的社会。当成年人大多在为金钱名利所奔波时,当与孩子共处时的谈资均为事业发展、利润亏损时,试问一张白纸又怎能不被沾染得墨迹斑斑?与此同时,将大人的不满足强加于孩子幼小的成长历程之中,狼爸、虎妈层出不穷的当下,一个孩子的童真不是被孩子淡忘,而是被一种恶性环境所扼杀。汪增祺描写金岳霖先生时,曾有金先生拿大石榴与孩子们斗鸡,上课上到一半时,捉虱子的场景。这些童真未泯的形象,让我们认识到一个学者、一个智者不应为虚浮名利勾心斗角忙碌终生,而应是对生活充满了热爱和积极的乐观情绪。
在一个鼓吹神童的媒体时代,在我心里,不是童亵渎了神,而是神亵渎了童。孩子的眼光是直线的,不会转弯,也碌如此,他能看到我们遗失的美好,他的创造、他的发问让我们看到了世界的另一面。童真的目光,或许就像是穿越时空的爱,能够照亮冰点以上的风景。
这份童真,这份初心,倘若一直坚守,如同守护一株鲜红欲滴的玫瑰,梦过于美好,守护也便更加沉重。天上人间,现实让人们知道自由不过是猎人与猎物之间的距离。但为什么现实让人们害怕得连一个梦的开端也不肯轻易地为孩子许下呢?
遗失的童真被一种潜在的暴力撕扯得支离破碎。最好的成长,不是小小年纪就考上了名牌大学,不是小小年纪就深谙世俗之法,不是小小年纪就挥毫千里、琴声悠扬。我更愿看到“最喜小儿无赖,村头卧剥莲蓬”的无忧闲适之景。未来或许残酷,但心中有好奇、有想象、有创造,便不会畏惧。
有些事终要经历,那便到时深究,有些事如此美好,为何不好好珍惜?遗失的童真,带给了我们怅惘,但愿这番省悟能让天真无邪的笑声在风中散播得更久一些。(60分)
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命令去提交。
近期评论