今天天气不错

2014.7.23 下午,  快5点, 苏州, 天气不错, 有很多的云.

让我想起了刚来苏州那一年, 也是在夏天, 与大家一块去苏州乐园玩的情意. 那天的天气和今天像极了. 但是心情却不一样了.  就像甄嬛说的, 这样的朝阳如同我们进宫那一年, 但心境却大不相同了.

今天下班后得去疾控中心打针, 上个月的某天晚上下班后, 在站台附近看到一只小猫,  大概两个月不到的样子,  走路颤颤巍巍的,  想把它带回家养, 谁知被它狠狠的咬了一口, 我满手都是血,  怕得狂犬病,  果断去打针,  今天是最后一针.

现在的服务器是用C++和lua写的, 都知道lua不支持多线程, 如果在多个线程中同时使用lua_State*的话,  那一定会崩溃的,  只是早晚的问题.  如果给每个调用lua_State的地方都加一个锁的话,  那多线程就变成单线程的了,  甚至还不如单线程,  因为这个锁来锁去的东西得切换线程.  加了锁, 变成了单线程,  那就没意义了;  没意义倒还在其次,  那并发起来的服务器,  单线程是扛不住的!

由于是在windows下面写的服务器, 我使用的网络模型是windows线程池. 它内部把IOCP给封装了一下, 其实就是用的IOCP.  每次响应消息的时候, 都是一个线程. 

我现在的做法是做了一个lua_State的管理类. 用来分配和回收lua_State, 每次响应消息的时候呢就分配出一个lua_State给这个线程使用. 用完之后,  就又把这个lua_State给回收起来.  不是把lua_State给关了. 使用这种方式最重要的就是共享数据的问题.  我现在 将lua中的共享都提出来放到C++中了,  lua就做逻辑处理吧您内!

现在想想, 多线程的部分完全没有必要用lua来写.  蛋疼!

posted @ 2014-07-23 16:59  莫压枯枯地  阅读(301)  评论(0编辑  收藏  举报