一、就操作系统设计的复杂度上,windows要超过Linux
如果windows抛弃人机操作的窗口界面,其性能并不比linux差;
编写Web浏览器的难度要远大于编写Web服务器的难度;
二、为何大公司喜欢用linux
1、免费且开源,相对于免费,开源更加重要;
2、开源意味着更安全;
3、开源意味着可优化;
因为开源所以透明,因为透明,所以安全,但安全是相对的。
所谓的安全是针对大公司,是针对那些真正懂linux内核的人。他们可以自己定制化linux,比如加入自己特性化的功能,修改潜在的漏洞,或者他们认为需要完善的地方,甚至可以调优linux来解决自身业务的瓶颈。
透明是把双刃剑,对那些只会linux命令的人,开源并不意味着安全,因为你根本搞不清楚自己使用的机器是否被控制, 如果别人给你一个内核中藏有木马的linux,那么恭喜你,你可能永远都会沉浸在自己幻想的所谓安全中。
换句话说,如果windows开源了,那么windows对大公司是安全的,他们可以一窥windows内核,并对其增删改,去掉 所有图形化元素,将动态加载驱动改为内核态加载,优化IOCP并将其发挥到极致,我相信windows也会变成安全、稳定、 可靠、优秀的服务器,而且会比linux还要优秀。
但对于绝大部分在windows下做开发的程序员来说,windows开不开源其实跟你没有半毛钱关系,除非你有能力将windows 上千万行的代码耐心看一遍,前提是你要能看懂。首先,你要把汇编语言再学习一遍,把操作系统的书多看几遍,把编译原理的书也多看几遍,否则这些代码在你面前和天书没本质区别;其次你要有足够的时间和足够耐心;最后,你要真能识别出风险,毕竟windows是最成熟的商业操作系统,如果你认为自己的智商能够超越微软那些顶级架构师几十年的精心设计和打磨,那你还改屁操作系统啊,直接进中科院设计国产OS为国增光吧。
记住:对别人的安全并不意味着对你安全!
开发后台程序和懂服务器、懂操作系统,完全是两个概念,这两者的差别就像狗和热狗的差别一样。 在linux上开发java后台应用服务,并不意味着这个程序员有多了解linux,后台程序跑在Apache、Tomcat、Nginx这些 真正的服务器上,这些服务器在帮你的程序优雅的处理高并发、高吞吐量和低延迟,而这些服务器必须要充分利用 linux内核的性能,这就意味你要真正理解什么是多线程,什么是线程池,select、poll和epoll的区别;
三、在网络方面,windows的IOCP模型要优于linux的epoll模型
1、IOCP真正发挥了多核CPU的性能,让IO操作均衡的负载在不同CPU线程上,epoll很可能会让有的线程累死,有的饿死;
2、IOCP是Proactor异步IO,epoll是reactor同步IO;
打个不恰当的比方,IOCP属于导弹发射后不管,最后通知你击中目标;epoll属于发射后需要分阶段导航。有人说epoll给了程序员更高的自由度处理来自内核的IO数据,毕竟可以手把手的制导导弹,很有成就感,但那是针对高水品程序员,如果你的水平一般的话,那结果可能是灾难性的。很有可能你会亲手把发射的导弹送出地球,或者引发另一场战争。实际上IOCP在业务处理上的难度要大于EPOLL,因为异步IO的原因,你的上层完整的业务已被碎片化了。
3、windows比linux在服务器性能上的慢,并不代表IOCP比Epoll差,这是windows定位的问题,如果你要让用户易用,那就要在某些方面做些牺牲。
多说几句:
1、我特烦那些人云亦云,一知半解的人,言必谈linux好,说来说去就是那么几条:linux开源、安全、稳定。你看,很多大公司在用,windows还要经常打补丁,有时还崩溃。linux都特么开源了,等于人人都可以随时打补丁,人家偷偷打补丁还要让你知道么?如果自己代码写的烂,不管是linux还是windows,都一样的下场。合着linux就是专门为跑你的烂代码设计的,永远不崩溃跑不死么?
2、你要是觉得linux好,那就在linux上写代码、看小电影、上网聊天,最好不要在windows上办公。你一边用着windows,一边鄙视windows,端起碗来吃肉,放下碗就骂娘,有意思么?
3、你拿linux服务器方面的性能比windows 服务器性能,拿长处比短处;你怎么不拿windows的人机交互和linux的人机交互做对比啊。当然这种装逼犯,肯定会自豪的说:我们大牛级猿就喜欢玩这种DOS命令行,你咋不复古去玩打孔卡片交互呢。你干嘛还用智能触屏手机,干脆腰上挂个BP机,左手小灵通,右手大哥大,不是更拉风么?
我特么明明能用打火机点着的,你非要给我给我展示一段钻木取火野外求生。说到底计算机、操作系统只是工具,怎么好用怎么好,不是让你噼里啪啦对着键盘一顿敲,自我感觉风骚的一比。我特么就问你:键盘敲出来的命令和鼠标点出来的命
由于开发人员不同,面对的用户群体不同,Linux系统和Windows系统的区别可以从以下几方面来看:
从技术层面来看:Linux和Windows最大的区别是Linux允许所有用户具有完全访问代码的权限,用户可以做自己喜欢的任何改动。访问代码的好处是可以很容易地修复Bug,并改进系统。相反,大多数Windows用户不具有访问代码的权限,也就说Windows系统不允许用户进行修改;
从用户定位来看:Windows是个商业系统,更适合“普通人”,这个系统能够开箱即用,不用进行各种复杂的配置,操作只有那么固定的几种,能够轻松的满足办公、游戏等日常需要。而Linux系统作为一类开源系统,更接近底层,开放的东西也更多,更适合IT技术人员使用;
从价格角度来看:Linux和Windows服务器之间有比较明显的差异,Linux能够成为流行的Web操作系统之一,主要原因是它相对便宜,Windows则昂贵得多;
从安全角度来看:Linux比Windows有更多的漏洞,但Linux开源软件开发方式有助于暴露错误,用众人智慧解决问题,各种补丁更新也很快。
数通畅联专注于企业IT架构、SOA综合集成、数据治理分析领域,感谢您的阅读与关注。
本质上嘛,就是文件系统的区别
举个例子(仅仅是为了说明问题)对于二进制数据段01011101,Linux认为它表示加法运算符,Windows则认为它是减法运算符,这就是两个系统本质区别,就好比我国人认为竖起大拇指表示赞同,厉害,但在有的国家就是不好的意思。
中文的操作系统这个词,其对应英文是Operating System,将Operating翻译成操作,其实不是很准确,当然想换个更准确的词也不容易,但我们要知道,这个Operating其实有控制的意思。而OS的本质其实应该是控制,即它是控制计算机的各种资源的系统,OS主要包含四种功能:CPU管理(进程管理),内存管理,外存管理和I/O管理。
要比较Linux系统和Windows系统的本质区别,不是讨论其是不是共享、价格是不是便宜或服务支持好不好,而要考虑其本质的区别,我认为主要有四个:
不同的体系和生态
经过华为被禁用GMS服务后,国内很多人都明白了生态对一个操作系统的重要性。我认为对于Windows系统和Linux系统来说,生态不同是其本质的一个区别。
对于普通的Windows个人用户来说,现在在Windows平台上,你几乎可以找到所有的你需要的软件,如果你有觉得一个重要需求还得不到满足,那可以恭喜你,你可能发现了一片蓝海,马上可以组织人马来开发这方面的软件了,靠率先推出一种软件,你发家致富实现财务自由估计是没问题的。
而对于普通的Linux用户来说,现在普通的办公软件都还能满足,但你想一些个人专业软件或玩热门游戏,则几乎都找不到合适的替代品。简单说,Linux桌面版还只能作为学习linux的工具,想在上面完成一些专业工作则不可能。
从服务器搭建的角度来看,这也是两个体系:
在windows系统下,基本上微软软件可以把一切都搞定,目前就是Windows Server 2003操作系统+SQL Server的标准版或者企业版,个人服务器也可以在Windows10下搭建。
一般Linux系统使用LAMP组合,就是Linux + Php + Mysql + Appache,可以发布PHP网站。另外也可以支持ASP等。
两大操作系统的体系结构不同
Window体系结构是分层的模块化结构,主要层次有硬件抽象层HAL、内核、执行体和大量的子系统集合。
1.内核:内核执行Windows操作系统中最基本的操作,主要提供下列功能:线程安排和调度、陷阱处理和异常调度、中断处理和调度、多处理器同步、供执行体使用的基本内核对象。
内核始终在核心态上,代码短小紧凑、可移植性好。通常除了中断服务例程(ISR),正在运行的程序是不能抢先内核的。
2.硬件抽象层HAL:为运行在WINDOWS操作系统上的硬件平台提供低端接口,HAL隐藏各种与硬件有关的细节。
3.执行体:执行体从用户态导处并且可以调用函数。
4.系统进程和系统线程:系统进程是一种特殊的、只运行在核心态的系统线程(只运行在内核态,执行加载于系统空间中的代码)宿主。
系统线程没有用户进程地址空间,因此必须从系统内存堆中分配动态存储区,系统线程只能从内核调用。
linux体系结构可以认为是分成了内外两块空间(现在CPU可以执行不同工作模式):
用户空间:用户空间又包含了用户的应用程序和c库
内核空间:内核空间又包括系统调用,内核以及平台架构相关的代码
用户空间和内核空间是程序执行的两种不同的状态,我们可以通过系统调用和硬件中断来完成用户空间到内核空间的转移。
1.Linux内核
内核是操作系统的核心。
有:系统调用、内存管理、进程管理、设备驱动文件、文件系统和网络管理等。
2.Linux Shell
Shell是用户交互界面,提供用户与内核进行交互的接口。
3.Linux文件系统
文件系统是文件储存在磁盘等储存设备上的组织方法。
4.Linux应用程序
标准的Linux系统一般都有一套称为应用程序的程序集,包括:文本编辑器、编程语言、X Window、办公套件、Internet工具和 数据库等。
核心代码的可访问性
Linux和Windows之间最大的区别之一,就是Linux允许所有用户都具有完全访问代码的权限,他们可以做自己喜欢的任何改动。访问代码的好处是,它可以很容易地修复Bug,并改进系统。
相反,大多数Windows用户不具有访问代码的权限,也不允许他们进行修改。
有些人觉得,公开核心的代码,会有一些恶意开发者破坏系统,并降低安全性。
对于普通用户来说,访问核心代码其实意义不大,我们其实没有修改代码的能力;但这一点对于一些大公司或重要部门的关键应用来说,还是很重要的,他们可以进行有针对性的优化。
熟悉了Linux之后,你会觉得能随意访问内核很好,这一切都在自己的控制下。而对于Windows,你要想搞清楚内核到底是什么样的,必须精通汇编语言,精通内核函数地址,几乎非黑客不能做到。
性能不同
Linux可以针对机器的配置进行有针对性的优化,它对于x86_64的支持也领先Windows 不少。在相同配置下,经过优化过的Linux在性能方面确实远远超过Windows,所以国内的大部分企业服务器,使用的都是Linux平台(当然这与Linux价格便宜也有关系)。
Windows不能针对配置进行任何的优化,只能把所有的模块都固定的安装上去。不管你是不是跑某种和GUI完全无关的关键服务,Windows GUI一定是要运行的,如果一个GUI的BUG导致了系统的崩溃,那只能怪你自己倒霉了。当然,从普通个人用户的使用感受来看,windows还是非常出色的,它的图形操作使用起来还是要简洁明了得多。
结论:
对于中小企业来说,Linux和Windows其实相当于代表了两条技术路线,你选择了一条之后,短时间内再进行重构的可能性几乎没有;而对于普通技术人员来说,也是走了一条路再走另一条的可能性也不大,毕竟要精通一个操作系统还是需要很大精力的。而且真成了某一个体系的高手之后,两者的思维方式几乎都不同了。
很多人说,国内服务器领域几乎是Linux一统天下,但其实中小企业也有很多用Windows的,就是很多可能用的是盗版。所以,这两者学习任何一种,都还是能找到工作的。