游戏开发论坛

 找回密码
 立即注册
搜索
楼主: sjinny

关于多线程安全的队列……

[复制链接]

149

主题

4981

帖子

5033

积分

论坛元老

Rank: 8Rank: 8

积分
5033
QQ
 楼主| 发表于 2004-6-23 04:39:00 | 显示全部楼层

Re: Re:关于多线程安全的队列……

tarkey: Re:关于多线程安全的队列……

我的意思不是多线程,而仅仅只是两个线程,一个监视IO,一个负责处理。
先来先处理,这样有什么不妥当吗?...


对数据包的处理会花掉不少时间,因为在我的设计中,在获取一个操作请求后,就要调用函数来处理,这个处理过程中,可能会包含碰撞检测和其他一些比较耗时的操作,可能在某个操作处理完毕之前就会有多个socket又可读了,这时又怎么办呢?怎么知道该先处理哪个呢? [em7]

59

主题

1104

帖子

1199

积分

金牌会员

Rank: 6Rank: 6

积分
1199
发表于 2004-6-23 10:41:00 | 显示全部楼层

Re:关于多线程安全的队列……

。。。。你怎么总喜欢把问题想那么复杂呢。
while(1)
{
      if(check_io() == READABLE) queue.insert(read_io());
}
你认为在这一个loop会有多长时间?这个时间片里面同时到达的数据几乎可以认为是完全同一时刻到达,就好象你喜欢argue说世界上没有绝对同一时刻的东西,但是在量子物理里面,认为宇宙上的时间片是可以分为不能再继续分下去的时间片的。当这个成立的时候,就会有数据是同时到达的了。当你明白了这一点的时候,你就可以处理两个同时到达的数据,用什么方法都无所谓,如果你非要他们同时处理的话,就用多线程。

对于queue这种数据结构,最典型的特点就是FIFO,First In First Out,你先压进队列的东西,当然是先处理。

另外我不明白你所谓的会花费很多时间这个概念,如果你的服务器的对请求的处理能够感觉到比较明显的时间在处理了,那么你应该考虑是否该修改修改你的服务器的逻辑结构了。对于服务器来说,最主要的资源消耗就是IO,如果你用一些不必要的运算来导致服务器IO效率的降低,实际上就是在提高运营成本。

0

主题

1

帖子

9

积分

新手上路

Rank: 1

积分
9
发表于 2004-6-23 16:29:00 | 显示全部楼层

Re: 关于多线程安全的队列……

不管Windows还是*nix下面都有非常容易使用的异步IO机制

Windows : IOCP
Linux : AIO, EPOLL
FREEBSD : AIO, KQUEUE

不要再用select或者1vs1的模式了

59

主题

1104

帖子

1199

积分

金牌会员

Rank: 6Rank: 6

积分
1199
发表于 2004-6-23 17:20:00 | 显示全部楼层

Re:关于多线程安全的队列……

epoll 和 select 的原理一样的,效率稍微高一点的说。

149

主题

4981

帖子

5033

积分

论坛元老

Rank: 8Rank: 8

积分
5033
QQ
 楼主| 发表于 2004-6-24 01:18:00 | 显示全部楼层

Re: 关于多线程安全的队列……

为什么你们提到的技术大多数我都没听说过…… [em15]

另:我现在也不准备立即确定设计了,我先写个小程序看看多线程+阻塞读取的资源占用到底是怎样的……
但是目前的问题是:我只创建了255个线程就不能再创建新线程了,返回值说明的是内存不够……我一看,这255个线程占了2G的内存,令我感到费解的是,我的物理内存是256M,交换分区(虚拟内存)是512M…… [em7]

另外,今天我问一网友,他说阻塞状态是不占用CPU资源的,我也这么觉得,因为阻塞后就被挂起了,然后印该是设备状态的变化是线程被激活,我觉得内核是可以实现这种被动的模式的…… [em5]

59

主题

1104

帖子

1199

积分

金牌会员

Rank: 6Rank: 6

积分
1199
发表于 2004-6-24 06:55:00 | 显示全部楼层

Re:关于多线程安全的队列……

....你不查询,怎么知道IO端口是否可读?

149

主题

4981

帖子

5033

积分

论坛元老

Rank: 8Rank: 8

积分
5033
QQ
 楼主| 发表于 2004-6-24 08:20:00 | 显示全部楼层

Re:关于多线程安全的队列……

比如驱动程序在处理相关设备的时候,修改了设备状态,然后就激活被挂起的线程……

59

主题

1104

帖子

1199

积分

金牌会员

Rank: 6Rank: 6

积分
1199
发表于 2004-6-24 10:13:00 | 显示全部楼层

Re:关于多线程安全的队列……

驱动程序怎么知道你上面的应用级线程在监听这个IO?

59

主题

1104

帖子

1199

积分

金牌会员

Rank: 6Rank: 6

积分
1199
发表于 2004-6-24 10:32:00 | 显示全部楼层

Re:关于多线程安全的队列……

IO的阻塞是挂起,但是跟线程无关,只是调用这个阻塞函数会阻塞。
同时造成的开销是要新建一个线程,线程的开销也很大的。
我觉得你在写网络程序之前,最好去看看别人的方法,不然跟你解释起来也很麻烦的。
毕竟一两句话说不清。

59

主题

1104

帖子

1199

积分

金牌会员

Rank: 6Rank: 6

积分
1199
发表于 2004-6-24 10:32:00 | 显示全部楼层

Re:关于多线程安全的队列……

IO的阻塞是挂起,但是跟线程无关,只是调用这个阻塞函数会阻塞。
同时造成的开销是要新建一个线程,线程的开销也很大的。
我觉得你在写网络程序之前,最好去看看别人的方法,不然跟你解释起来也很麻烦的。
毕竟一两句话说不清。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-7-2 12:35

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表