最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

淺談chuck-lua中的多線程

 更新時(shí)間:2015年07月08日 11:34:57   投稿:hebedich  
Lua對(duì)多線程支持初步體驗(yàn)是本文要介紹的內(nèi)容,主要是來了解LUA中多線程的使用,,經(jīng)過反復(fù)的實(shí)驗(yàn)得到的結(jié)果是,lua不支持多線程,如何讓它支持?來看本文內(nèi)容。

chuck-lua支持actor模式的線程模型.可以通過cthread.new創(chuàng)建線程,然后通過cthread.sendmail向線程發(fā)送消息.

與skynet這種框架不同,chuck-lua并不提供多線程的任務(wù)/消息調(diào)度功能,每個(gè)線程維護(hù)了一個(gè)簡單的線程郵箱,用于緩存其它線程發(fā)過來的消息.

下面看一個(gè)簡單的多線程服務(wù)器示例:

mtserver.lua

local chuck = require("chuck")
local engine = require("distri.engine")
local socket_helper = chuck.socket_helper
local Distri = require("distri.distri")
local cthread = chuck.cthread

local worker 

function on_new_client(fd)
  cthread.sendmail(worker,{fd})
end

local fd = socket_helper.socket(socket_helper.AF_INET,
                 socket_helper.SOCK_STREAM,
                 socket_helper.IPPROTO_TCP)
socket_helper.addr_reuse(fd,1)

local ip = "127.0.0.1"
local port = 8010

if 0 == socket_helper.listen(fd,ip,port) then
  print("server start",ip,port)
  local server = chuck.acceptor(fd)
  server:Add2Engine(engine,on_new_client)
  Distri.Signal(chuck.signal.SIGINT,Distri.Stop) 
  worker = cthread.new("distri/test/worker.lua")
  Distri.Run()
end

worker.lua

local chuck = require("chuck")
local socket = require("distri.socket")
local engine = require("distri.engine")
local clone  = chuck.packet.clone
local cthread = chuck.cthread
local Distri = require("distri.distri")

--設(shè)置郵件處理函數(shù)
cthread.process_mail(engine,function (sender,mail)
  local fd = table.unpack(mail)
  local s = socket.stream.New(fd)
  if s:Ok(4096,socket.stream.decoder.rawpacket(),function (_,msg,errno)
    if msg then
      s:Send(clone(msg))
    else
      s:Close(errno)
      s = nil
    end
  end) then
    s:SetRecvTimeout(5000)
  else
    s:Close()
  end 
end)

Distri.Run()

這個(gè)示例很簡單,主線程啟動(dòng)監(jiān)聽,創(chuàng)建一個(gè)線程,當(dāng)接收到連接時(shí)就將fd發(fā)送給worker線程.

在這里需要簡單介紹一下chuck-lua線程相關(guān)的一些細(xì)節(jié).

因?yàn)楦骶€程跑在獨(dú)立的虛擬機(jī)上,因此無法直接通過消息的方式將一個(gè)虛擬機(jī)中的對(duì)象發(fā)送到另一個(gè)線程中.目前sendmail將作為消息傳遞給它的lua table序列化為一種適合傳輸?shù)膶?duì)象,目標(biāo)線程接收這個(gè)對(duì)象之后再重新轉(zhuǎn)化成本線程虛擬機(jī)中的lua table.目前消息支持lua中的所有基本類型,但為了安全考慮,不支持直接傳遞userdata類型.

用cthread.sendmail向目標(biāo)線程發(fā)送消息時(shí),如果到達(dá)目標(biāo)郵箱的緩沖上線將會(huì)阻塞.所有期望處理郵件消息的線程都必須調(diào)用cthread.process_mail設(shè)定消息回調(diào)函數(shù).如果不設(shè)定,將可能導(dǎo)致消息發(fā)送線程永久阻塞.

線程使用join模式創(chuàng)建,創(chuàng)建者可以通過cthread.join等待線程的結(jié)束.

以上所述就是本文的全部內(nèi)容了,希望大家能夠喜歡。

相關(guān)文章

  • 讓你的python代碼更加pythonic(簡練、明確、優(yōu)雅)

    讓你的python代碼更加pythonic(簡練、明確、優(yōu)雅)

    這篇文章主要介紹了讓你的python代碼更加pythonic(簡練、明確、優(yōu)雅),本文講解的是一種讓代碼更加清晰、簡練、明確、優(yōu)雅的書寫方法,需要的朋友可以參考下
    2014-10-10
  • Lua中的基本數(shù)據(jù)類型詳細(xì)介紹

    Lua中的基本數(shù)據(jù)類型詳細(xì)介紹

    這篇文章主要介紹了Lua中的基本數(shù)據(jù)類型詳細(xì)介紹,本文詳細(xì)的講解了Lua中的8種基本數(shù)據(jù)類型,需要的朋友可以參考下
    2014-09-09
  • 使用Lua編寫Nginx服務(wù)器的認(rèn)證模塊的方法

    使用Lua編寫Nginx服務(wù)器的認(rèn)證模塊的方法

    這篇文章主要介紹了使用Lua編寫Nginx服務(wù)器的認(rèn)證模塊的方法,即諸如當(dāng)今流行的社交應(yīng)用接入等功能,需要的朋友可以參考下
    2015-06-06
  • Lua教程(十三):弱引用table

    Lua教程(十三):弱引用table

    這篇文章主要介紹了Lua教程(十三):弱引用table,一個(gè)table的弱引用類型是通過其元表的__mode字段來決定的,如果該值為包含字符"k",那么table就是key弱引用,如果包含"v",則是value弱引用,如果兩個(gè)字符均存在,就是key/value弱引用,需要的朋友可以參考下
    2015-04-04
  • Lua極簡入門指南:全局變量

    Lua極簡入門指南:全局變量

    這篇文章主要介紹了Lua極簡入門指南:全局變量,本文講解了全局變量、_ENV等內(nèi)容,需要的朋友可以參考下
    2014-10-10
  • Lua性能優(yōu)化技巧(一):前言

    Lua性能優(yōu)化技巧(一):前言

    這篇文章主要介紹了Lua性能優(yōu)化技巧(一):前言,本文講解了2條優(yōu)化原則,本文是系列文章的第一篇,需要的朋友可以參考下
    2015-04-04
  • Lua讀寫文件代碼示例

    Lua讀寫文件代碼示例

    這篇文章主要介紹了Lua讀寫文件代碼示例,本文講解了讀寫文件的模式以及讀寫文件代碼實(shí)例,需要的朋友可以參考下
    2015-04-04
  • Lua中實(shí)現(xiàn)StringBuffer功能

    Lua中實(shí)現(xiàn)StringBuffer功能

    這篇文章主要介紹了Lua中實(shí)現(xiàn)StringBuffer功能,本文給出了實(shí)現(xiàn)代碼和調(diào)用代碼,需要的朋友可以參考下
    2014-11-11
  • Lua中rawset和rawget的作用淺析

    Lua中rawset和rawget的作用淺析

    這篇文章主要介紹了Lua中rawset和rawget的作用淺析,本文分別用兩段代碼演示了rawset和rawget的作用,需要的朋友可以參考下
    2015-04-04
  • Lua中使用table實(shí)現(xiàn)的其它5種數(shù)據(jù)結(jié)構(gòu)

    Lua中使用table實(shí)現(xiàn)的其它5種數(shù)據(jù)結(jié)構(gòu)

    這篇文章主要介紹了Lua中使用table實(shí)現(xiàn)的其它5種數(shù)據(jù)結(jié)構(gòu),本文用table為基礎(chǔ),實(shí)現(xiàn)了數(shù)組、鏈表、隊(duì)列、集合等數(shù)據(jù)類型,需要的朋友可以參考下
    2014-09-09

最新評(píng)論

长阳| 红原县| 林周县| 松原市| 醴陵市| 城口县| 颍上县| 辽宁省| 富源县| 和静县| 阆中市| 平远县| 双柏县| 聂拉木县| 三都| 垦利县| 浏阳市| 菏泽市| 买车| 兴和县| 彭泽县| 志丹县| 秀山| 梨树县| 松江区| 鄂托克旗| 临安市| 敦化市| 嘉兴市| 高清| 孟州市| 乐清市| 龙胜| 丰都县| 凤城市| 洛南县| 乡城县| 隆尧县| 朔州市| 天长市| 东山县|