阅读:2207回复:3
多线程调用PLX SDK API 函数问题
我在使用PCI9030时,需要多线程调用PLX SDK中的一些函数,对两个不同的地址空间(A、B)写入数据,然后分别等待读出有效数据。我用了2种方法测试操作速度:
1。在一个函数里(不使用多线程),先向A写入数据,再向B写入数据,然后循环读出A、B的数据有无变化,哪个有变化则哪个地址的操作结束。 2。使用两个线程, ThreadA:向A写入数据,然后循环读出A的数据有无变化,有则结束 ThreadB:向B写入数据,然后循环读出B的数据有无变化,有则结束 同时启动两个线程。 理论上分析因为第2种方法使用了多线程,较少浪费数据操作时间,应该速度比第1种快,但恰好相反,第1种的速度却比第2种快的多。 如果从硬件上理解的话,每次对9030的操作都是独占的。我比较困惑。PLX SDK所提供的函数是否要有支持多线程的功能(或者我的概念根本就是错的),怎么使用多线程会提高速度,请各位大侠指教! |
|
沙发#
发布于:2002-04-25 15:26
用户被禁言,该主题自动屏蔽! |
|
板凳#
发布于:2002-04-25 17:12
只有一块硬件,多线程一般没意义,应用层的io到了核心层还是只经过一个驱动,驱动一般内部排个队列,把这些请求都串行。如果硬件支持多个通道,相应的驱动也同时维护几个通道,并且有自己的策略来管理这些通道,那么应用层的多线程才能起点作用。
多线程的意思是支持几个应用层的程序同时打开它,而速度的瓶颈往往不在应用层进程和核心层的连接数上,而是在硬件的速度和驱动软件读取速度上。所以这个多线程不意味着速度提高。你是把这个多线程的道理和应用层的网络蚂蚁之类的搞混了。 |
|
地板#
发布于:2002-04-26 09:06
多谢2位指点,我也认为多线程对硬件访问速度提高不了,我可以优化一下硬件访问时序来提高速度。
|
|