一: 程序异常接管
windows 核心编程中, 作者指出windows 是在系统层面接管异常的. 也就是说可以将异常调试发送到系统中的任何想要调试的程序. 目前linux 没有此功能, 估计应该是版本众多, 外加此功能并不重要, 所以并未支持, linux 是进程接收异常. 并处理.
二: IOCP
IOCP 是真正的完全的异步. EPOLL 不是, IOCP有两个优点, 一:免去轮询, 二: 省去拷贝. 此两点epoll不具备, unix类系统目前并未实现真正的异步, 虽然提出过 reactor 与 proactor 编程 模型, 但并不真正支持.
目前开源的跨平台网络库, libuv, aiso 都是仿 IOCP. (PS: iocp 诞生于上世纪90年代, 比 epoll , kqueue 还要早, 并非部分人所说的, 后发先至; 而是先发先至)
三: 缓存预投递 (此点 与 上一点 关联):
WINDOWS 在文件系统和网络系统中都支持了缓存预投递, 无论是否全异步(event 可以算半异步); 类 unix 系统 至今不支持预投递, 原因何在? 难道是因为专利?
四: 符号定位
定位上, windows 采用二层链表的模式, 定位符号需要指定模块, 首层链表为模块, 模块下面的链表为符号链表; 正常而言, 程序是不存在不需要指定模块句柄 的情况的, 所以定位符号这块, Windows 的效率高于 linux; linux 整个程序的符号都存在于一个链表中, 只能 next, next; 这在桌面系统上是不可取的. 在服务器系统当中, 本人也不推荐这种方式; 虽然缺点不明显. (不修改是为了兼容还是因为专利?)
五: windows 在应用层, 开发各种各样的 集成库 框架, 导致同时兼容的框架太多; 桌面版程序又多, CPU 大多功能较差, 所以在一定程度上影响系统的运行效率 的同时, 给许多人的体验也不是很好;
所以我换了新电脑?
六: 兼容性
windows (API 及 APP 支持) 兼容性太强, 许多 XP 运行的程序现在还能在 WIN10 正常运行; 过分的兼容导致接口不断增加, 一定程序上影响了系统的运行效率. 这算优点还是缺点?
PS: 说到这里我想起了 windows 10, 说实话, 这系统实在是太臃肿了. windows 7 仍然是我的最受.
linux 的开发惯例是 仅支持小版本兼容; (这是服务器开发模式, 桌面版不能用?)
七: 文件格式
文件的图标 显示上, windows 采用通过文件扩展名的方式, 一方面可以让用户方便的隐藏自己的文件(改后缀格式), 一方面读取文件索引块, 即可显示文件类型. 效率很高;
linux 采用读取文件内容(头部)的方式为主, 文件扩展名为辅的方式 , 来判断文件格式, 并显示文件格式对应的图标; (主和辅 有没有写错?)
毫无疑问 这是一个愚蠢的做法; 这导致磁盘随机读写次数增加很多; 拖累系统运行效率;
如果 linux 不做桌面, 这个问题可以忽略; 服务器系统 还有几个 需要桌面的; 需要桌面的, 也是偶尔用一下, 影响可以忽略.
至于 windows 的 资源管理器 文件显示较慢 是因为他添加了许多 桌面 HOOK 支持, 以及 overlay 的图标查询. 这属于功能支持, 另当别论.
八: 开发工具
VS 太臃肿了, 这真是一个缺点; 所以我安装了 VS 用来做编译, 但从来没用它做过编辑; MFC, ATL, WTL 之类的开发库 也被我弃用, 也没用过 .net 还有 WPF 框架.
据说 .net 是一门优秀的语言, 不过我没有学习过. 主要是因为我的开发方向用不到 .net.
我的编辑工具是 qt creator, 一个跨平台的工具, 在 linux 服务器的开发中, 我也是用 creator 来管理项目的, 感觉很方便.
九: WINDOWS 对开发的支持 很强大, 许多功能系统都提供了内置的 API 或 组件, 对应功能 在 linux 桌面版上 全都需要自己开发; 所以 linux 上我都是开发相对简单的程序;
不想陷入造轮子的泥潭中; 对于产品的回复也很简单, 三个字, 干不了 或 不支持. 否则 请给我 一年时间; (这他妈是三个字)
以上纯为个人见解, 由于知识所限, 出现错误也难免.