写过跨Linuxicon和Windows平台系统软件(C/C++)的研发工作者,一定深感到其中的痛苦。尽管在一些网络协议(如:TCP/IP)上是相同的,但编程模型、以及编译器上的细微差别就让人头疼万分。
犇叔略举几个点:
1)事件通知模型:众所周知,Linux有基于事件的用户态中断机制,通俗来说就是select/poll/epoll的用户态和内核态事件通知模型。要在Windows系统上找出对等的机制,可不太容易。
2)GNU C编译器和MSVC编译器:总有一些出乎你意料的编译器行为,犇叔建议一定要写好单模块的ut用例。
3)原子操作icon和内存语义:找到匹配的原子操作,不是那么困难。但仍然要注意其中语义差别,包括内存可见性和内存序问题(这一点,犇叔下半年写一个相关专题)。
4)并发:多线程icon和多进程在这两个平台上的差别非常大,要特别留意Linux下的“惊群”唤醒,以及Windows下iocp的内部机制,性能表现非常大。
今天,总体而言,Windows作为数据中心的常驻服务端已经少之又少。但包括客户端(如docker),以及众多优势领域,仍然绕不开Windows平台的支持,譬如图形图像渲染、远程桌面等。就Windows APIicon来说,犇叔认为其设计非常优秀,相比Linux系统调用和GNU C lib库的而言,不管是文档还是统一的风格,对程序员icon更友好。缺点是:“API数量真的非常庞大”。想来,这也是微软要做一个上层统一框架的直接原因吧。
#创意代码大赏#
犇叔略举几个点:
1)事件通知模型:众所周知,Linux有基于事件的用户态中断机制,通俗来说就是select/poll/epoll的用户态和内核态事件通知模型。要在Windows系统上找出对等的机制,可不太容易。
2)GNU C编译器和MSVC编译器:总有一些出乎你意料的编译器行为,犇叔建议一定要写好单模块的ut用例。
3)原子操作icon和内存语义:找到匹配的原子操作,不是那么困难。但仍然要注意其中语义差别,包括内存可见性和内存序问题(这一点,犇叔下半年写一个相关专题)。
4)并发:多线程icon和多进程在这两个平台上的差别非常大,要特别留意Linux下的“惊群”唤醒,以及Windows下iocp的内部机制,性能表现非常大。
今天,总体而言,Windows作为数据中心的常驻服务端已经少之又少。但包括客户端(如docker),以及众多优势领域,仍然绕不开Windows平台的支持,譬如图形图像渲染、远程桌面等。就Windows APIicon来说,犇叔认为其设计非常优秀,相比Linux系统调用和GNU C lib库的而言,不管是文档还是统一的风格,对程序员icon更友好。缺点是:“API数量真的非常庞大”。想来,这也是微软要做一个上层统一框架的直接原因吧。
#创意代码大赏#
展开
评论
点赞
活动规则:活动期间在搞笑段子圈子并带话题#代码很“秀” 发沸点秀出代码即可。
活动奖项
奖项 1。不做分母奖 马克杯一个 规则:本条沸点下评论抽出一位送出~
奖项2。代码最‘秀’奖 拖鞋一双加鼠标垫一个。规则:活动期间在搞笑段子圈子并带话题#代码很“秀” 发布沸点评论和点赞累计第一名(发的所有沸点的累计)
奖项3。我爱分享奖。抱枕一个。规则:活动期间在搞笑段子圈子并带话题#代码很“秀” 发布至少一条沸点,达到要求的人抽一位送出