À´Ô´£ºinfoq
¾¡¹ÜGo 1.5¸Õ¸Õ·¢²¼£¬ÈÔÈ»Ïà¶Ô½ÏУ¬µ«ÊÇGoÍŶÓÒѾÔÚÖÂÁ¦ÓڸĽøÆäеĵÍÑÓ³Ù²¢·¢À¬»øÊÕ¼¯Æ÷£¬Ï£ÍûGo¸üÊʺÏеÄÓ¦ÓÃÁìÓò¡£Google¹¤³ÌʦAustin ClementsºÍRick HudsonÈçÊÇ˵¡£
Go 1.5ÓÃеÄÀ¬»øÊÕ¼¯Æ÷´úÌæÁËÔÀ´µÄSTW£¨stop-the-world£© GC£¬½â¾öÁËÑÓ³ÙÎÊÌâ¡£µ±¸ºÔؽÏÖØÊ±£¬Ã¿50ms£¬ÐµÄGCµÄ»î¶¯Ê±¼ä¿ÉÒÔ¿ØÖÆÔÚ10msÒÔÏ£¬´Ó¶øÊ¹Go³ÌÐòÔÚÒ»°ãÇé¿öÏÂÄÜÔËÐеøü¿ìЩ¡£ÔÚ¸ü¼«¶ËµÄÇé¿öÏ£¬Í£¶Ù¿ÉÒÔ´Ó300ms½µµ½4ms¡£
Go 1.6µÄÄ¿±êÊǽøÒ»²½Îȶ¨GC£¬²¢ÔÚÒÔϼ¸¸ö·½Ãæ×ö³ö¸Ä½ø£º
״̬е÷£¨State coordination£©£ºGo 1.5 GCÓиöÖ÷Ҫƿ¾±ÊÇ´ÓGo 1.4¼Ì³ÐÀ´µÄ£¬Ô´×ÔÆä¼¯ÖÐʽµÄGCе÷Æ÷£¨coordinator£©£¬ÕâÊÇÒ»¸öµ¥¶ÀµÄgoroutine£¬Ëü»á½«¹¤×÷½øÒ»²½·ÖÅɸøworker goroutineÈ¥Íê³É¡£Ò»ÖÖ½â¾ö·½°¸ÊÇÓÃÈ¥ÖÐÐÄ»¯µÄ״̬»ú´úÌæ¼¯ÖÐʽе÷Æ÷¡£ÕâÑùÐÞ¸ÄÓиö¶îÍâµÄºÃ´¦£¬Ê¹µÃÖØÐÂÉè¼Æ±ê¼ÇÍê³ÉÆÁÕÏ£¨mark completion barrier£©³ÉΪ¿ÉÄÜ£¬ÒòΪËüÒѾ±äµÃ·Ç³£ÁèÂÒ£¬¶øÇÒÐÔÄܺܲ
ÐÅÓÃϵͳ£¨Credit system£©£ºGo 1.5ÔÚÁ½¸ö²»Í¬µÄµØ·½Ê¹ÓÃÁËÒ»¸öÐÅÓÃϵͳ£ºÒ»¸öÊÇÈ·±£Çåɨ£¨sweeping£©ÔÚÒ»¸öGCÖÜÆÚºÍÏÂÒ»´Î´¥·¢¶Ñ²Ù×÷£¨the next heap trigger£©Ö®¼äÍê³É£¬Ò»¸öÊÇÈ·±£É¨Ã裨scanning£©ÔÚ´¥·¢¶Ñ²Ù×÷£¨an heap trigger£©ºÍËæºóʵÏÖ¶Ñ´¦ÀíÄ¿±êÖ®¼äÍê³É¡£¸Ä½øÐÅÓÃϵͳµÄÒ»ÖÖ½¨Òé·½·¨ÊÇ£¬Ê¹Æä²Ù×÷×ÜÊÇÔÚblack½×¶Î½øÐУ¬ÒÔ±ÜÃâδÍê³ÉµÄ·ÖÅä²Ù×÷½øÈëÏÂÒ»¸öGCÖÜÆÚ¡£
±ê¼Ç½áÊø£¨Mark termination£©£º¸ù¾ÝClementsºÍHudsonµÄ½éÉÜ£¬ÔÚGo 1.5ÖУ¬±ê¼Ç½áÊø½×¶ÎÊÇÍ£¶Ùʱ¼äµÄ´óÍ·¡£ÕâÀïµÄÄ¿±êÊdz¢ÊÔ²¢È·±£´ó²¿·ÖÓ¦ÓÿÉÒÔÔÚ10msÍ£¶ÙµÄãÐÖµÏÂÔËÐУ¬ÕâÒ²ÊÇGo 1.5ÔںܶàÇé¿öÏÂÒѾʵÏÖÁ˵ġ£Ï£ÍûËù×öÐ޸ĵĸ´ÔӶȽϵͻòÖеȣ¬±ÈÈç°ÑfinalizerɨÃè´Ó±ê¼Ç½áÊø½×¶ÎÒÆµ½²¢·¢É¨Ã裬ÕâÑù¶ÔÓÚÿ1GB´óСµÄ¶Ñ£¬Ó¦¸Ã¿ÉÒÔ½ÚÊ¡1ms£¬ÒÔ¼°È¥µôÒ»¸ö³É±¾ºÜ¸ßµÄ¼ÆÊýÑ»·£¬¶ÔÓڽϴóµÄ¶Ñ£¬Õâ¸öÑ»·Õ¼È¥Á˱ê¼Ç½×¶ÎµÄÁíÍâÒ»°ë¡£
sweeperºÍscavenger£ºÄ³Ð©³ÌÐò»áÔÚsweeperÉÏÏûºÄ´óÁ¿Ê±¼ä£¬ÔÚÕâÉÏÃæÍ¶ÈëЩ¾«Á¦£¬Ó¦¸ÃÓÐÐÔÄܸĽø¡£Ò»¸ö·Ç³£¼¤½øµÄ·½°¸ÊÇÍêȫȥµôsweeper¡£»¹ÓÐÒ»¸ö²»ÄÇô¼¤½øµÄ·½°¸£¬¿ÉÒÔÔÚGC½×¶Î×îºó£¬¾¡ÔçÊͷŽϴóµÄ¶ÔÏ󣬲¢ÇÒÔÚËùÓеÄϵͳÉÏÖ§³Öscavenger£¬²»¹ÜÎïÀíÒ³ÃæÊǶà´ó¡£
ÉÏÃæÖ»ÊǶԼƻ®Ëù×ö¸Ä½øµÄÒ»¸ö¸ÅÀÀ£¬ÓûÈ«ÃæÁ˽⣬¿ÉÒÔÔĶÁÔʼÎĵµ¡£ÎĵµÖл¹ÓнøÒ»²½Ö¸ÏòGitHub issuesµÄÁ´½Ó£¬ÕâЩissues¼Ç¼ ÁËÿ¸ö¸Ä±ä±³ºóµÄÀíÓÉÒÔ¼°½¨Òé·½°¸¡£