写过跨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数量真的非常庞大”。想来,这也是微软要做一个上层统一框架的直接原因吧。
#创意代码大赏#
展开
敩科炼技堂于2022-09-14 03:43发布的图片
评论