windows与linux程序设计的区别

自毕业至今,一直从事着c++相关的工作,有在windows下,也有在linux下,一直想写一篇文章关于windows和linux下程序设计的区别,现在从以下几点进行简短的总结,希望和各位小伙伴共勉。

一、为何windows比较适合客户端程序,linux适合服务端程序

为何windows适合开发客户端程序,从他诞生开始,就是为普通的用户而生,简洁的界面,方便的操作,就是适合运行客户端程序,虽然他也有server版本,但是奔溃和挂起是常有的状态,与linux是无法相提并论的。本人从事windows c++ 客户端程序主要是采用direct ui思想的duilib图形渲染库,和其他音视频相关功能的dll,或com组件。

linux适合开发服务端程序:黑黑的界面就是适合在背后默默的工作!没有绚丽多彩的界面,稳定,安全,开源是其重要的特点。

linux往往承载着cpu巨大的压力,往往要与文件服务器,数据库服务器相关,作者本人一直以来从事c/c++ 的音视频相关性工作,也不是很了解这中间的关系。在音视频领域,服务器压力往往都在带宽,cpu计算的压力,如果是视频会议服务器sfu模式,只负责一些转发工作,若是mcu类型的往往需要gpu参与大量的计算的。以janus为例,janus程序中的视频会议,主要处理与客户端相关的信令以及与音视频相关的流

 

二、异步架构的区别

不管是客户端程序还是服务端程序,弄清楚需求的前提下,由下而上的设计,往往需要为整个程序选好基础框架,一个优秀的异步框架,是保证整个程序高效运行的基础。

windows 选用比较多的异步框架libuv

linux下 glib main event loop

虽然各自都有上层应用封装的异步库,我还是想要简单的分析一下,windows和linux的异步库的区别:

实现的目标不同:

windows:主动性, 一般应用客户端程序,实时性要高,同时UI交互的强

linux: 被动性,一般应用服务端程序,高负荷性工作,需要考虑负载均衡等特点

windows与linux的异步程序实现的区别

windows高效的异步设计模式为iocp,

linux高效的异步设计模式为epoll,

iocp与epoll有什么区别:

与传统的select和poll相比,该异步结构的内存分配方式都是由应用层分配,引用的方式传递,不需要在底层内核重新分配内存

iocp的通知与读写,整个流程都是由系统完成,

epoll的通知与读写是分离的,通知是由系统完成的,读写由程序应用本身完成。

 

三、 多线程和多进程之间通信的区别

 

简单的聊聊两个平台下的多线程同步和多进程通信的区别

多线程之间的同步与交互:

同步:windows 下由mutex,criticalsection(临界区,用户态),event,

linux:mutex,读写锁

多线程下的数据交互:全局变量,单列模式,windows特有的 SendMessage和PostMessage

 

多进程之间的同步与交互:

多进程由两大类,进程与进程之间有亲子关系,另外一种是没有亲子关系。

windows核心编程中提到的多进程通信,主要由核心句柄通过继承,命名,复制三种方式

所以多进程之间通信,也有一定的规律,亲子关系,只要通过父子进程之间的继承关系,就可以进行通信,如管道pipe,半双工模式,数据是单向流动的,只能一端可以读,一端可以写

windows下还有两种特有的方式,文件映射,子进程继承父进程的句柄,可以往相同的句柄共享数据。

另外就是子进程复制父进程句柄,通过wm_copydata,发送消息,进行多进程通信

第二大类,共享模式,

大块内存和小块内存共享分界点0xFFFFFFFFF

前面:文件映射模式,也分继承方式,命名方式,复制方式

后者:内存共享模式

命名模式:如命名管道,毫无亲缘关系的进程

数据共享,win32 dll动态连接库的全局变量可以被所有调用的进程共享。

动态的多进程共享:

socket,数据进行共享

linux特有的进程同步,信号和信号量,消息队列

四、程序设计模式的不同

windows程序往往因为交互流程复杂,各个窗口之间的交互会比较复杂,个人比较喜欢使用的程序框架的设计模式为中介者模式,

该模式能清晰的将所有的功能模块独立,而不需要设计过多的子类,所谓的功能解耦。

缺点是:如果所有的功能都中介类进行分发处理,中介类会比较庞大,导致业务复杂,所以在子功能设计之间,需要借用观察者,单列模式来缓和中介类的压力

linux程序往往是默默在后台处理程序,不会逆向前行,往往采用command模式,一个线程负责生产command,一个线程负责消费command。当并发高的时候,多开几个线程才消费command。

 

 

 

 

 

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值