Äú¿ÉÒÔ¾èÖú£¬Ö§³ÖÎÒÃǵĹ«ÒæÊÂÒµ¡£

1Ôª 10Ôª 50Ôª





ÈÏÖ¤Â룺  ÑéÖ¤Âë,¿´²»Çå³þ?Çëµã»÷Ë¢ÐÂÑéÖ¤Âë ±ØÌî



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Model Center   Code  
»áÔ±   
   
 
     
   
 ¶©ÔÄ
  ¾èÖú
×Ö½ÚÌø¶¯ÔÚ Go ÍøÂç¿âÉϵÄʵ¼ù
 
  2592  次浏览      30
 2021-10-20
 
±à¼­ÍƼö:
±¾ÎĽ«½ö¼òµ¥½éÉÜ netpoll µÄÉè¼Æ£»Ëæºó£¬ÎÒÃǻ᳢ÊÔÊáÀíÒ»ÏÂÎÒÃÇ»ùÓÚ netpoll Ëù×öµÄһЩʵ¼ù£»×îºó£¬ÎÒÃǽ«·ÖÏíÒ»¸öÎÒÃÇÓöµ½µÄÎÊÌ⣬ÒÔ¼°ÎÒÃǽâ¾öµÄ˼·¡£
À´×ÔÓÚ΢ÐŹ«Öںţº »ù´¡¼Ü¹¹ÍÅ¶Ó ,ÓÉ»ðÁú¹ûÈí¼þAlice±à¼­¡¢ÍƼö¡£

ǰÑÔ

×Ö½ÚÌø¶¯¿ò¼Ü×éÖ÷Òª¸ºÔð¹«Ë¾ÄÚ RPC ¿ò¼ÜµÄ¿ª·¢Óëά»¤¡£RPC ¿ò¼Ü×÷ΪÑз¢ÌåϵÖÐÖØÒªµÄÒ»»·£¬³ÐÔØÁ˼¸ºõËùÓеķþÎñÁ÷Á¿¡£Ëæ×Ź«Ë¾ÄÚ Go ÓïÑÔʹÓÃÔ½À´Ô½¹ã£¬ÒµÎñ¶Ô¿ò¼ÜµÄÒªÇóÔ½À´Ô½¸ß£¬¶ø Go Ô­Éú net ÍøÂç¿âÈ´ÎÞ·¨Ìṩ×ã¹»µÄÐÔÄܺͿØÖÆÁ¦£¬ÈçÎÞ·¨¸ÐÖªÁ¬½Ó״̬¡¢Á¬½ÓÊýÁ¿¶àµ¼ÖÂÀûÓÃÂʵ͡¢ÎÞ·¨¿ØÖÆÐ­³ÌÊýÁ¿µÈ¡£ÎªÁËÄܹ»»ñÈ¡¶ÔÓÚÍøÂç²ãµÄÍêÈ«¿ØÖÆÈ¨£¬Í¬Ê±ÏÈÓÚÒµÎñ×öһЩ̽Ë÷²¢×îÖÕ¸³ÄÜÒµÎñ£¬¿ò¼Ü×éÍÆ³öÁËȫеĻùÓÚ epoll µÄ×ÔÑÐÍøÂç¿â ¡ª¡ª netpoll£¬²¢»ùÓÚÆäÖ®ÉÏ¿ª·¢ÁË×Ö½ÚÄÚÐÂÒ»´ú Golang ¿ò¼Ü KiteX¡£

ÐÂÐÍÍøÂç¿âÉè¼Æ

Reactor - ʼþ¼àÌýºÍµ÷¶ÈºËÐÄ

netpoll ºËÐÄÊÇ Reactor ʼþ¼àÌýµ÷¶ÈÆ÷£¬Ö÷Òª¹¦ÄÜΪʹÓà epoll ¼àÌýÁ¬½ÓµÄÎļþÃèÊö·û£¨fd£©£¬Í¨¹ý»Øµ÷»úÖÆ´¥·¢Á¬½ÓÉ쵀 ¶Á¡¢Ð´¡¢¹Ø±Õ ÈýÖÖʼþ¡£

Server - Ö÷´Ó Reactor ʵÏÖ

netpoll ½« Reactor ÒÔ 1:N µÄÐÎʽ×éºÏ³ÉÖ÷´Óģʽ¡£

  1. MainReactor Ö÷Òª¹ÜÀí Listener£¬¸ºÔð¼àÌý¶Ë¿Ú£¬½¨Á¢ÐÂÁ¬½Ó£»
  2. SubReactor ¸ºÔð¹ÜÀí Connection£¬¼àÌý·ÖÅäµ½µÄËùÓÐÁ¬½Ó£¬²¢½«ËùÓд¥·¢µÄʼþÌá½»µ½Ð­³Ì³ØÀï½øÐд¦Àí¡£
  3. netpoll ÔÚ I/O Task ÖÐÒýÈëÁËÖ÷¶¯µÄÄÚ´æ¹ÜÀí£¬ÏòÉϲãÌṩ NoCopy µÄµ÷Óýӿڣ¬ÓÉ´ËÖ§³Ö NoCopy RPC¡£
  4. ʹÓÃЭ³Ì³Ø¼¯Öд¦Àí I/O Task£¬¼õÉÙ goroutine ÊýÁ¿ºÍµ÷¶È¿ªÏú¡£

Client - ¹²Ïí Reactor ÄÜÁ¦

client ¶ËºÍ server ¶Ë¹²Ïí SubReactor£¬netpoll ͬÑùʵÏÖÁË dialer£¬Ìṩ´´½¨Á¬½ÓµÄÄÜÁ¦¡£client ¶ËʹÓÃÉÏºÍ net.Conn ÏàËÆ£¬netpoll ÌṩÁË write -> wait read callback µÄµ×²ãÖ§³Ö¡£

Nocopy Buffer

ΪʲôÐèÒª Nocopy Buffer ?

ÔÚÉÏÊöÌá¼°µÄ Reactor ºÍ I/O Task Éè¼ÆÖУ¬epoll µÄ´¥·¢·½Ê½»áÓ°Ïì I/O ºÍ buffer µÄÉè¼Æ£¬´óÌåÀ´Ëµ·ÖΪÁ½ÖÖ·½Ê½£º

  1. ²ÉÓÃˮƽ´¥·¢(LT)£¬ÔòÐèҪͬ²½µÄÔÚʼþ´¥·¢ºóÖ÷¶¯Íê³É I/O£¬²¢ÏòÉϲã´úÂëÖ±½ÓÌṩ buffer¡£
  2. ²ÉÓñßÑØ´¥·¢(ET)£¬¿ÉÑ¡ÔñÖ»¹ÜÀíʼþ֪ͨ(Èç go net Éè¼Æ)£¬ÓÉÉϲã´úÂëÍê³É I/O ²¢¹ÜÀí buffer¡£

Á½ÖÖ·½Ê½¸÷ÓÐÓÅȱ£¬netpoll ²ÉÓÃǰÕß²ßÂÔ£¬Ë®Æ½´¥·¢Ê±Ð§ÐÔ¸üºÃ£¬ÈÝ´íÂʸߣ¬Ö÷¶¯ I/O ¿ÉÒÔ¼¯ÖÐÄÚ´æÊ¹Óú͹ÜÀí£¬Ìṩ nocopy ²Ù×÷²¢¼õÉÙ GC¡£ÊÂʵÉÏһЩÈÈÃÅ¿ªÔ´ÍøÂç¿âÒ²ÊDzÉÓ÷½Ê½Ò»µÄÉè¼Æ£¬Èç easygo¡¢evio¡¢gnet µÈ¡£

µ«Ê¹Óà LT Ò²´øÀ´ÁíÒ»¸öÎÊÌ⣬¼´µ×²ãÖ÷¶¯ I/O ºÍÉϲã´úÂë²¢·¢²Ù×÷ buffer£¬ÒýÈë¶îÍâµÄ²¢·¢¿ªÏú¡£±ÈÈ磺I/O ¶ÁÊý¾Ýд buffer ºÍÉϲã´úÂë¶Á buffer ´æÔÚ²¢·¢¶Áд£¬·´Ö®ÒàÈ»¡£ÎªÁ˱£Ö¤Êý¾ÝÕýÈ·ÐÔ£¬Í¬Ê±²»ÒýÈëËø¾ºÕù£¬ÏÖÓеĿªÔ´ÍøÂç¿âͨ³£²ÉÈ¡ ͬ²½´¦Àí buffer(easygo, evio) »òÕß½« buffer ÔÙ copy Ò»·ÝÌṩ¸øÉϲã´úÂë(gnet) µÈ·½Ê½£¬¾ù²»ÊʺÏÒµÎñ´¦Àí»ò´æÔÚ copy ¿ªÏú¡£

ÁíÒ»·½Ã棬³£¼ûµÄ bytes¡¢bufio¡¢ringbuffer µÈ buffer ¿â£¬¾ù´æÔÚ growth ÐèÒª copy Ô­Êý×éÊý¾Ý£¬ÒÔ¼°Ö»ÄÜÀ©ÈÝÎÞ·¨ËõÈÝ£¬Õ¼ÓôóÁ¿ÄÚ´æµÈÎÊÌâ¡£Òò´ËÎÒÃÇÏ£ÍûÒýÈëÒ»ÖÖÐ嵀 Buffer ÐÎʽ£¬Ò»¾Ù½â¾öÉÏÊöÁ½·½ÃæµÄÎÊÌâ¡£

Nocopy Buffer Éè¼ÆºÍÓÅÊÆ

Nocopy Buffer »ùÓÚÁ´±íÊý×éʵÏÖ£¬ÈçÏÂͼËùʾ£¬ÎÒÃǽ« []byte Êý×é³éÏóΪ block£¬²¢ÒÔÁ´±íÆ´½ÓµÄÐÎʽ½« block ×éºÏΪ Nocopy Buffer£¬Í¬Ê±ÒýÈëÁËÒýÓüÆÊý¡¢nocopy API ºÍ¶ÔÏ󳨡£

Nocopy Buffer Ïà±È³£¼ûµÄ bytes¡¢bufio¡¢ringbuffer µÈÓÐÒÔÏÂÓÅÊÆ£º

  1. ¶Áд²¢ÐÐÎÞËø£¬Ö§³Ö nocopy µØÁ÷ʽ¶Áд
    • ¶Áд·Ö±ð²Ù×÷ͷβָÕ룬Ï໥²»¸ÉÈÅ¡£
  2. ¸ßЧÀ©ËõÈÝ
    • À©Èݽ׶Σ¬Ö±½ÓÔÚβָÕëºóÌí¼ÓÐ嵀 block ¼´¿É£¬ÎÞÐè copy Ô­Êý×é¡£
    • ËõÈݽ׶Σ¬Í·Ö¸Õë»áÖ±½ÓÊÍ·ÅʹÓÃÍê±ÏµÄ block ½Úµã£¬Íê³ÉËõÈÝ¡£Ã¿¸ö block ¶¼ÓжÀÁ¢µÄÒýÓüÆÊý£¬µ±ÊÍ·ÅµÄ block ²»ÔÙÓÐÒýÓÃʱ£¬Ö÷¶¯»ØÊÕ block ½Úµã¡£
  3. Áé»îÇÐÆ¬ºÍÆ´½Ó buffer (Á´±íÌØÐÔ)
    • Ö§³ÖÈÎÒâ¶ÁÈ¡·Ö¶Î(nocopy)£¬Éϲã´úÂë¿ÉÒÔ nocopy µØ²¢Ðд¦ÀíÊý¾ÝÁ÷·Ö¶Î£¬ÎÞÐè¹ØÐÄÉúÃüÖÜÆÚ£¬Í¨¹ýÒýÓüÆÊý GC¡£
    • Ö§³ÖÈÎÒâÆ´½Ó(nocopy)£¬Ð´ buffer Ö§³Öͨ¹ý block Æ´½Óµ½Î²Ö¸ÕëºóµÄÐÎʽ£¬ÎÞÐè copy£¬±£Ö¤Êý¾Ýֻдһ´Î¡£
  4. Nocopy Buffer ³Ø»¯£¬¼õÉÙ GC
    • ½«Ã¿¸ö []byte Êý×éÊÓΪ block ½Úµã£¬¹¹½¨¶ÔÏó³ØÎ¬»¤¿ÕÏÐ block£¬Óɴ˸´Óà block£¬¼õÉÙÄÚ´æÕ¼ÓÃºÍ GC¡£

»ùÓڸà Nocopy Buffer£¬ÎÒÃÇʵÏÖÁË Nocopy Thrift£¬Ê¹µÃ±à½âÂë¹ý³ÌÄÚ´æÁã·ÖÅäÁ㿽±´¡£

Á¬½Ó¶à·¸´ÓÃ

RPC µ÷ÓÃͨ³£²ÉÓöÌÁ¬½Ó»òÕß³¤Á¬½Ó³ØµÄÐÎʽ£¬Ò»´Îµ÷Óðó¶¨Ò»¸öÁ¬½Ó£¬ÄÇôµ±ÉÏÏÂÓιæÄ£ºÜ´óµÄÇé¿öÏ£¬ÍøÂçÖдæÔÚµÄÁ¬½ÓÊýÒÔ MxN µÄËÙ¶ÈÀ©ÕÅ£¬´øÀ´¾Þ´óµÄµ÷¶ÈѹÁ¦ºÍ¼ÆË㿪Ïú£¬¸ø·þÎñÖÎÀíÔì³ÉÀ§ÄÑ¡£Òò´Ë£¬ÎÒÃÇÏ£ÍûÒýÈëÒ»ÖÖ "ÔÚµ¥Ò»³¤Á¬½ÓÉϲ¢Ðд¦Àíµ÷ÓÃ" µÄÐÎʽ£¬À´¼õÉÙÍøÂçÖеÄÁ¬½ÓÊý£¬ÕâÖÖ·½°¸¼´³ÆÎª "Á¬½Ó¶à·¸´ÓÃ"¡£

µ±Ç°Òµ½çÒ²´æÔÚһЩ¿ªÔ´µÄÁ¬½Ó¶à·¸´Ó÷½°¸£¬³¸ÖâÓÚ´úÂë²ãÃæµÄÊø¸¿£¬ÕâЩ·½°¸¾ùÐèÒª copy buffer À´ÊµÏÖÊý¾Ý·Ö°üºÍºÏ²¢£¬µ¼ÖÂʵ¼ÊÐÔÄܲ¢²»ÀíÏë¡£¶øÉÏÊö Nocopy Buffer »ùÓÚÆäÁé»îÇÐÆ¬ºÍÆ´½ÓµÄÌØÐÔ£¬ºÜºÃµÄÖ§³ÖÁË nocopy µÄÊý¾Ý·Ö°üºÍºÏ²¢£¬Ê¹µÃʵÏÖ¸ßÐÔÄÜÁ¬½Ó¶à·¸´Ó÷½°¸³ÉΪ¿ÉÄÜ¡£

»ùÓÚ netpoll µÄÁ¬½Ó¶à·¸´ÓÃÉè¼ÆÈçÏÂͼËùʾ£¬ÎÒÃǽ« Nocopy Buffer(¼°Æä·ÖƬ) ³éÏóΪÐéÄâÁ¬½Ó£¬Ê¹µÃÉϲã´úÂë±£³Öͬ net.Conn ÏàͬµÄµ÷ÓÃÌåÑé¡£Óë´Ëͬʱ£¬Ôڵײã´úÂëÉÏͨ¹ýЭÒé·Ö°ü½«ÕæÊµÁ¬½ÓÉϵÄÊý¾ÝÁé»îµÄ·ÖÅäµ½ÐéÄâÁ¬½ÓÉÏ£»»òͨ¹ýЭÒé±àÂëºÏ²¢·¢ËÍÐéÄâÁ¬½ÓÊý¾Ý¡£

Á¬½Ó¶à·¸´Ó÷½°¸°üº¬ÒÔϺËÐÄÒªËØ£º

ÐéÄâÁ¬½Ó

  • ʵÖÊÉÏÊÇ Nocopy Buffer£¬Ä¿µÄÊÇÌæ»»ÕæÕýµÄÁ¬½Ó£¬¹æ±ÜÄÚ´æ copy¡£
  • ÉϲãµÄÒµÎñÂß¼­/±à½âÂë ¾ùÔÚÐéÄâÁ¬½ÓÉÏÍê³É£¬ÉϲãÂß¼­¿ÉÒÔÒì²½¶ÀÁ¢²¢ÐÐÖ´ÐС£

Shared map

  • ÒýÈë·ÖÆ¬ËøÀ´¼õÉÙËøÁ¦¶È¡£
  • ÔÚµ÷ÓöËʹÓà sequence id À´±ê¼ÇÇëÇ󣬲¢Ê¹ÓÃ·ÖÆ¬Ëø´æ´¢ id ¶ÔÓ¦µÄ»Øµ÷¡£
  • ÔÚ½ÓÊÕÏìÓ¦Êý¾Ýºó£¬¸ù¾Ý sequence id À´ÕÒµ½¶ÔÓ¦»Øµ÷²¢Ö´ÐС£

ЭÒé·Ö°üºÍ±àÂë

  • ÈçºÎʶ±ðÍêÕûµÄÇëÇóÏìÓ¦Êý¾Ý°üÊÇÁ¬½Ó¶à·¸´Ó÷½°¸¿ÉÐеĹؼü£¬Òò´ËÐèÒªÒýÈëЭÒé¡£
  • ÕâÀï²ÉÓà thrift header protocol ЭÒ飬ͨ¹ýÏûϢͷÅжÏÊý¾Ý°üÍêÕûÐÔ£¬Í¨¹ý sequence id ±ê¼ÇÇëÇóºÍÏìÓ¦µÄ¶ÔÓ¦¹ØÏµ¡£

ZeroCopy

ÕâÀïËù˵µÄ ZeroCopy£¬Ö¸µÄÊÇ Linux ËùÌṩµÄ ZeroCopy µÄÄÜÁ¦¡£ÉÏÒ»ÕÂÖÐÎÒÃÇ˵ÁËÒµÎñ²ãµÄÁ㿽±´£¬¶øÖÚËùÖÜÖª£¬µ±ÎÒÃǵ÷Óà sendmsg ϵͳµ÷Ó÷¢°üµÄʱºò£¬Êµ¼ÊÉÏÈÔÈ»ÊÇ»á²úÉúÒ»´ÎÊý¾ÝµÄ¿½±´µÄ£¬²¢ÇÒÔÚ´ó°ü³¡¾°ÏÂÕâ¸ö¿½±´µÄÏûºÄ·Ç³£Ã÷ÏÔ¡£ÒÔ 100M ΪÀý£¬perf ¿ÉÒÔ¿´µ½ÈçϽá¹û£º

Õ⻹½ö½öÊÇÆÕͨ tcp ·¢°üµÄÕ¼Óã¬ÔÚÎÒÃǵij¡¾°Ï£¬´ó²¿·Ö·þÎñ¶¼»á½ÓÈë Service Mesh£¬ËùÒÔÔÚÒ»´Î·¢°üÖУ¬Ò»¹²»áÓÐ 3 ´Î¿½±´£ºÒµÎñ½ø³Ìµ½Äںˡ¢Äں˵½ sidecar¡¢sidecar ÔÙµ½Äںˡ£ÕâʹµÃÓдó°üÐèÇóµÄÒµÎñ£¬¿½±´Ëùµ¼Ö嵀 cpu Õ¼ÓûáÌØ±ðÃ÷ÏÔ£¬ÈçÏÂͼ£º

ΪÁ˽â¾öÕâ¸öÎÊÌ⣬ÎÒÃÇÑ¡ÔñÁËʹÓà Linux ÌṩµÄ ZeroCopy API£¨ÔÚ 4.14 ÒÔºóÖ§³Ö send£»5.4 ÒÔºóÖ§³Ö receive£©¡£µ«ÊÇÕâÒýÈëÁËÒ»¸ö¶îÍâµÄ¹¤³ÌÎÊÌ⣺ZeroCopy send API ºÍÔ­Ïȵ÷Ó÷½Ê½²»¼æÈÝ£¬ÎÞ·¨ºÜºÃµØ¹²´æ¡£ÕâÀï¼òµ¥½éÉÜһϠZeroCopy send µÄ¹¤×÷·½Ê½£ºÒµÎñ½ø³Ìµ÷Óà sendmsg Ö®ºó£¬sendmsg »á¼Ç¼Ï iovec µÄµØÖ·²¢Á¢¼´·µ»Ø£¬ÕâʱºòÒµÎñ½ø³Ì²»ÄÜÊÍ·ÅÕâ¶ÎÄڴ棬ÐèҪͨ¹ý epoll µÈ´ýÄں˻ص÷Ò»¸öÐźűíÃ÷ij¶Î iovec ÒѾ­·¢Ëͳɹ¦Ö®ºó²ÅÄÜÊÍ·Å¡£ÓÉÓÚÎÒÃDz¢²»Ï£Íû¸ü¸ÄÒµÎñ·½µÄʹÓ÷½·¨£¬ÐèÒª¶ÔÉϲãÌṩͬ²½ÊÕ·¢µÄ½Ó¿Ú£¬ËùÒÔºÜÄÑ»ùÓÚÏÖÓÐµÄ API ͬʱÌṩ ZeroCopy ºÍ·Ç ZeroCopy µÄ³éÏó£»¶øÓÉÓÚ ZeroCopy ÔÚС°ü³¡¾°ÏÂÊÇÓÐÐÔÄÜËðºÄµÄ£¬ËùÒÔÒ²²»Äܽ«Õâ¸ö×÷ΪĬÈϵÄÑ¡Ïî¡£

ÓÚÊÇ£¬×Ö½ÚÌø¶¯¿ò¼Ü×éºÍ×Ö½ÚÌø¶¯ÄÚºË×éºÏ×÷£¬ÓÉÄÚºË×éÌṩÁËͬ²½µÄ½Ó¿Ú£ºµ±µ÷Óà sendmsg µÄʱºò£¬Äں˻á¼àÌý²¢À¹½ØÄÚºËÔ­ÏȸøÒµÎñµÄ»Øµ÷£¬²¢ÇÒÔڻص÷Íê³Éºó²Å»áÈà sendmsg ·µ»Ø¡£ÕâʹµÃÎÒÃÇÎÞÐè¸ü¸ÄÔ­ÓÐÄ£ÐÍ£¬¿ÉÒԺܷ½±ãµØ½ÓÈë ZeroCopy send¡£Í¬Ê±£¬×Ö½ÚÌø¶¯ÄÚºË×黹ʵÏÖÁË»ùÓÚ unix domain socket µÄ ZeroCopy£¬¿ÉÒÔʹµÃÒµÎñ½ø³ÌÓë Mesh sidecar Ö®¼äµÄͨÐÅÒ²´ïµ½Á㿽±´¡£

ÔÚʹÓÃÁË ZeroCopy send ºó£¬perf ¿ÉÒÔ¿´µ½Äں˲»ÔÙÓÐ copy µÄÕ¼Óãº

´Ó cpu Õ¼ÓÃÊýÖµÉÏ¿´£¬´ó°ü³¡¾°Ï ZeroCopy Äܹ»±È·Ç ZeroCopy ½Úʡһ°ëµÄ cpu¡£

Go µ÷¶Èµ¼ÖµÄÑÓ³ÙÎÊÌâ·ÖÏí

ÔÚÎÒÃÇʵ¼ù¹ý³ÌÖУ¬·¢ÏÖÎÒÃÇÐÂдµÄ netpoll ËäÈ»ÔÚ avg ÑÓ³ÙÉϱíÏÖʤÓÚ Go Ô­ÉúµÄ net ¿â£¬µ«ÊÇÔÚ p99 ºÍ max ÑÓ³ÙÉÏÒªÆÕ±éÂÔ¸ßÓÚ Go Ô­ÉúµÄ net ¿â£¬²¢ÇÒ¼â´ÌÒ²»á¸ü¼ÓÃ÷ÏÔ£¬ÈçÏÂͼ£¨Go 1.13£¬À¶É«Îª netpoll + ¶à·¸´Óã¬ÂÌɫΪ netpoll + ³¤Á¬½Ó£¬»ÆÉ«Îª net ¿â + ³¤Á¬½Ó£©£º

ÎÒÃdz¢ÊÔÁ˺ܶàÖְ취ȥÓÅ»¯£¬µ«ÊÇÊÕЧÉõ΢¡£×îÖÕ£¬ÎÒÃǶ¨Î»³öÕâ¸öÑÓ³Ù²¢·ÇÊÇÓÉÓÚ netpoll ±¾ÉíµÄ¿ªÏúµ¼Öµģ¬¶øÊÇÓÉÓÚ go µÄµ÷¶Èµ¼Öµģ¬±ÈÈç˵£º

  1. ÓÉÓÚÔÚ netpoll ÖУ¬SubReactor ±¾ÉíÒ²ÊÇÒ»¸ö goroutine£¬Êܵ÷¶ÈÓ°Ï죬²»Äܱ£Ö¤ EpollWait »Øµ÷Ö®ºóÂíÉÏÖ´ÐУ¬ËùÒÔÕâÒ»¿é»áÓÐÑÓ³Ù£»
  2. ͬʱ£¬ÓÉÓÚÓÃÀ´´¦Àí I/O ʼþµÄ SubReactor ºÍÓÃÀ´´¦ÀíÁ¬½Ó¼àÌýµÄ MainReactor ±¾ÉíÒ²ÊÇ goroutine£¬ËùÒÔʵ¼ÊÉϺÜÄѱ£Ö¤ÔÚ¶àºËÇé¿ö֮ϣ¬ÕâЩ Reactor Äܲ¢ÐÐÖ´ÐУ»ÉõÖÁÔÚ×¶ËÇé¿ö֮ϣ¬¿ÉÄÜÕâЩ Reactor »á¹ÒÔÚͬһ¸ö P Ï£¬×îÖÕ±ä³ÉÁË´®ÐÐÖ´ÐУ¬ÎÞ·¨³ä·ÖÀûÓöàºËÓÅÊÆ£»
  3. ÓÉÓÚ EpollWait »Øµ÷Ö®ºó£¬SubReactor ÄÚÊÇ´®Ðд¦Àí I/O ʼþµÄ£¬µ¼ÖÂÅÅÔÚ×îºóµÄʼþ¿ÉÄÜ»áÓг¤Î²ÎÊÌ⣻
  4. ÔÚÁ¬½Ó¶à·¸´Óó¡¾°Ï£¬ÓÉÓÚÿ¸öÁ¬½Ó°ó¶¨ÁËÒ»¸ö SubReactor£¬¹ÊÑÓ³ÙÍêȫȡ¾öÓÚÕâ¸ö SubReactor µÄµ÷¶È£¬µ¼Ö¼â´Ì»á¸ü¼ÓÃ÷ÏÔ¡£

ÓÉÓÚ Go ÔÚ runtime ÖжÔÓÚ net ¿âÓÐ×öÌØÊâÓÅ»¯£¬ËùÒÔ net ¿â²»»áÓÐÒÔÉÏÇé¿ö£»Í¬Ê± net ¿âÊÇ goroutine-per-connection µÄÄ£ÐÍ£¬ËùÒÔÄÜÈ·±£ÇëÇóÄܲ¢ÐÐÖ´Ðжø²»»áÏ໥ӰÏì¡£

¶ÔÓÚÒÔÉÏÕâ¸öÎÊÌ⣬ÎÒÃÇĿǰ½â¾öµÄ˼·ÓÐÁ½¸ö£º

  1. ÐÞ¸Ä Go runtime Ô´Â룬ÔÚ Go runtime ÖÐ×¢²áÒ»¸ö»Øµ÷£¬Ã¿´Îµ÷¶Èʱµ÷Óà EpollWait£¬°Ñ»ñÈ¡µ½µÄ fd ´«µÝ¸ø»Øµ÷Ö´ÐУ»
  2. Óë×Ö½ÚÌø¶¯ÄÚºË×éºÏ×÷£¬Ö§³ÖͬʱÅúÁ¿¶Á/д¶à¸öÁ¬½Ó£¬½â¾ö´®ÐÐÎÊÌâ¡£ÁíÍ⣬¾­¹ýÎÒÃǵIJâÊÔ£¬Go 1.14 Äܹ»Ê¹µÃÑÓ³ÙÂÔÓнµµÍͬʱ¸ü¼ÓƽÎÈ£¬µ«ÊÇËùÄÜ´ïµ½µÄ¼«ÏÞ QPS ¸üµÍ¡£Ï£ÍûÎÒÃǵÄ˼·Äܹ»¸øÒµ½çͬÑùÓöµ½´ËÎÊÌâµÄͬѧÌṩһЩ²Î¿¼¡£

ºó¼Ç

Ï£ÍûÒÔÉϵķÖÏíÄܹ»¶ÔÉçÇøÓÐËù°ïÖú¡£Í¬Ê±£¬ÎÒÃÇÒ²ÔÚ¼ÓËÙ½¨Éè netpoll ÒÔ¼°»ùÓÚ netpoll µÄпò¼Ü KiteX¡£»¶Ó­¸÷λ¸ÐÐËȤµÄͬѧ¼ÓÈëÎÒÃÇ£¬¹²Í¬½¨Éè Go ÓïÑÔÉú̬£¡

 

 

   
2592 ´Îä¯ÀÀ       30
Ïà¹ØÎÄÕÂ

ÆóÒµ¼Ü¹¹¡¢TOGAFÓëArchiMate¸ÅÀÀ
¼Ü¹¹Ê¦Ö®Â·-ÈçºÎ×öºÃÒµÎñ½¨Ä££¿
´óÐÍÍøÕ¾µçÉÌÍøÕ¾¼Ü¹¹°¸ÀýºÍ¼¼Êõ¼Ü¹¹µÄʾÀý
ÍêÕûµÄArchimateÊÓµãÖ¸ÄÏ£¨°üÀ¨Ê¾Àý£©
Ïà¹ØÎĵµ

Êý¾ÝÖÐ̨¼¼Êõ¼Ü¹¹·½·¨ÂÛÓëʵ¼ù
ÊÊÓÃArchiMate¡¢EA ºÍ iSpace½øÐÐÆóÒµ¼Ü¹¹½¨Ä£
ZachmanÆóÒµ¼Ü¹¹¿ò¼Ü¼ò½é
ÆóÒµ¼Ü¹¹ÈÃSOAÂ䵨
Ïà¹Ø¿Î³Ì

ÔÆÆ½Ì¨Óë΢·þÎñ¼Ü¹¹Éè¼Æ
ÖÐ̨սÂÔ¡¢ÖÐ̨½¨ÉèÓëÊý×ÖÉÌÒµ
ÒÚ¼¶Óû§¸ß²¢·¢¡¢¸ß¿ÉÓÃϵͳ¼Ü¹¹
¸ß¿ÉÓ÷ֲ¼Ê½¼Ü¹¹Éè¼ÆÓëʵ¼ù
×îл¼Æ»®
DeepSeekÔÚÈí¼þ²âÊÔÓ¦ÓÃʵ¼ù 4-12[ÔÚÏß]
DeepSeek´óÄ£ÐÍÓ¦Óÿª·¢Êµ¼ù 4-19[ÔÚÏß]
UAF¼Ü¹¹ÌåϵÓëʵ¼ù 4-11[±±¾©]
AIÖÇÄÜ»¯Èí¼þ²âÊÔ·½·¨Óëʵ¼ù 5-23[ÉϺ£]
»ùÓÚ UML ºÍEA½øÐзÖÎöÉè¼Æ 4-26[±±¾©]
ÒµÎñ¼Ü¹¹Éè¼ÆÓ뽨ģ 4-18[±±¾©]
 
×îÐÂÎÄÕÂ
¼Ü¹¹Éè¼Æ-̸̸¼Ü¹¹
ʵÏÖSaaS£¨Èí¼þ¼°·þÎñ£©¼Ü¹¹Èý´ó¼¼ÊõÌôÕ½
µ½µ×ʲôÊÇÊý¾ÝÖÐ̨£¿
ÏìӦʽ¼Ü¹¹¼ò½é
ÒµÎñ¼Ü¹¹¡¢Ó¦Óüܹ¹ÓëÔÆ»ù´¡¼Ü¹¹
×îпγÌ
Èí¼þ¼Ü¹¹Éè¼Æ·½·¨¡¢°¸ÀýÓëʵ¼ù
´Ó´óÐ͵çÉ̼ܹ¹Ñݽø¿´»¥ÁªÍø¸ß¿ÉÓüܹ¹Éè¼Æ
´óÐÍ»¥ÁªÍø¸ß¿ÉÓüܹ¹Éè¼ÆÊµ¼ù
ÆóÒµ¼Ü¹¹Ê¦ (TOGAF¹Ù·½ÈÏÖ¤)
ǶÈëʽÈí¼þ¼Ü¹¹Éè¼Æ¡ª¸ß¼¶Êµ¼ù
³É¹¦°¸Àý
ijÐÂÄÜÔ´µçÁ¦ÆóÒµ Èí¼þ¼Ü¹¹Éè¼Æ·½·¨¡¢°¸ÀýÓëʵ¼ù
Öк½¹¤ÒµÄ³Ñо¿Ëù ǶÈëʽÈí¼þ¿ª·¢Ö¸ÄÏ
ij¹ìµÀ½»Í¨ÐÐÒµ ǶÈëʽÈí¼þ¸ß¼¶Éè¼ÆÊµ¼ù
±±¾© º½Ìì¿Æ¹¤Ä³×Ó¹«Ë¾ Èí¼þ²âÊԼܹ¹Ê¦
±±¾©Ä³ÁìÏÈÊý×ÖµØÍ¼ ¼Ü¹¹Ê¦£¨Éè¼Æ°¸Àý£©