使用背景:通过网络对多个设备进行固件升级。(假设网络带宽,以及硬件性能均不是问题)
技术方法:为每个设备建立单独的通讯线程,这样可以多个设备同时升级、提高效率。(几十个线程)
问题是:此时磁盘上只有一个升级文件(bin文件),升级过程中需要多次读取bin文件的不同位置(几千次读操作)。这就面临多个线程要访问同一个资源的问题。所以目前有两种方法可供选择:
1. 避免共享问题
1.1 方法:预先在一个文件夹下,手动拷贝多个bin文件,为每个设备打开不同的bin文件,实现独占资源。
评论:这个办法是可行的,但是太蛮力了。
1.2 方法:有没有办法,打开磁盘文件的时候,能产生独立的内存映射,每次打开产生一个独占的资源???
评论:这个方法会比较好用。
2. 使用线程同步技术
技术:使用关键段(或Slin读/写锁)等技术对bin文件的读操作进行保护。
评论:但是当线程非常多的时候,不可避免的会产生抢占资源的冲突,当线程达到30+的时候会不会造成性能很大的下降。
对这个线程访问没有太多的经验,还希望有经验的同学指点一下,是否真的如我想象的这样?///////////////////////////////////////////////////////////////////////////
所以比较倾向于避免共享问题的方法,这里又属方法1.2比较常规通用。
如果行不通,只能使用方法1.1了。
技术方法:为每个设备建立单独的通讯线程,这样可以多个设备同时升级、提高效率。(几十个线程)
问题是:此时磁盘上只有一个升级文件(bin文件),升级过程中需要多次读取bin文件的不同位置(几千次读操作)。这就面临多个线程要访问同一个资源的问题。所以目前有两种方法可供选择:
1. 避免共享问题
1.1 方法:预先在一个文件夹下,手动拷贝多个bin文件,为每个设备打开不同的bin文件,实现独占资源。
评论:这个办法是可行的,但是太蛮力了。
1.2 方法:有没有办法,打开磁盘文件的时候,能产生独立的内存映射,每次打开产生一个独占的资源???
评论:这个方法会比较好用。
2. 使用线程同步技术
技术:使用关键段(或Slin读/写锁)等技术对bin文件的读操作进行保护。
评论:但是当线程非常多的时候,不可避免的会产生抢占资源的冲突,当线程达到30+的时候会不会造成性能很大的下降。
对这个线程访问没有太多的经验,还希望有经验的同学指点一下,是否真的如我想象的这样?///////////////////////////////////////////////////////////////////////////
所以比较倾向于避免共享问题的方法,这里又属方法1.2比较常规通用。
如果行不通,只能使用方法1.1了。
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货