go并发调度原理学习

时间:2022-07-27 02:31:36

aaarticlea/jpeg;base64,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o6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2dri4+Tl5ufo6ery8/T19vf4+fr/2wBDAAICAgICAgMCAgMFAwMDBQYFBQUFBggGBgYGBggKCAgICAgICgoKCgoKCgoMDAwMDAwODg4ODg8PDw8PDw8PDw//2wBDAQICAgQEBAcEBAcQCwkLEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBD/3QAEADX/2gAMAwEAAhEDEQA/AP38ooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAP/0P38ooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAP/0f38ooooAKKKKACiiigAooooAKKKKACiiigAooooAKQnHNLUEjKB+8+7+VAEoJxk8GlBBqEbfvHvUqHK5oAdRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUe1ACE0bvWgjtiuQ8Z+Jbfwno8mrT/P5ePlHU5NGoXR129c7e9IrqzFR1HWuS8K+KLPxZo0WqWgwJOq9xiuriwc7elFu4rktFFFAwooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigD/9L9/KKKKACiiigAooooAKKKKACiiigAooooAKY77SB1JpxOKikycccUAOZ8Zz2r54+JfirW77Vk0DwrMY/sh3XcgGdo6j65r2HxN4gtfD2iXGo3bbY0GAe5LcD9a8R8O20xgbVL8bZ70kvnkkfw/pXVh6HMcmJr8h7F4M8RReJtFgvM/vEG117gjj9a7CLOWx93tXzj4av08LeL101/3drrJOwn7q7Bz+dfRltjZwd3vWFak4yNqNXmRYoooqDUKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKaTginVG4JxzxQ2BH5wRWduFHevnXxFqNz4w8XCyVdum6ZkOeol3D+lel+PfFaeG9CklC77mX5Y0HVsnB/KvNdCszp9lGt1zLJlmPru5/Su7B0OZ3ZwY2vyx0HeFL+Pwr4tOmA7LLU+Ix/Cu0c19DQGMLhK+dfEGlJqenNGD5cseGDjqu3nj616t4A14634fhmdgZkyrL3G3gZ+tTjqXLLQMDW5lqd5k4zikBzwetMDbxlTginqcjNcZ3jqKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA//0/38ooooAKKKKACiiigAooooAKKKKACiiigBCM1GwGeTT2bbXHeN/EcXh7Q5rsfNKw2oO+W4/SnFXegnKyueR+Orv/hJvEa6Ez7rXTiDMB0fdyPyrYaOJRiJcYAGPpXN+GtJm0yxaS8bzry5O5pD1wTkD8q6YHnYRtA6ivdwtHlWp8/iqvNIxde0j+19PFq33h8yEcEFeetel+AfET6rokS3Jzdx5Vh3wvAzXGfJs8ljkP8Aeb0rndOuJvCPilL63b/iW6kcT+iFeB+ZrPHUdOZHTga1nys+llcsenFOBz1qpbsjxrIjfKwBx9atKwYbh3rxT2B1FFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAU0ttp1IcHr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7PsP+fWL/vhf8KUabYHn7LF/3wv+FaFGcUtRfIzhplh1a1iP/bNf8Kki0+yhfzYoER/VVAP6VeyaXrTUhaESxAH5TgelSou0YpQMUtAwooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigD/9L9/KKKKACiiigAooooAKCM8UUUANCgdKUUtFABRRRQAUUUUAFZ2r86Te/9cJP/AEE1o1n6v/yCb3/rhJ/6CaAPmD9lbjw5fj/ptJ/6Ga+r6+UP2V/+Rdv/APrtJ/6Ga+rh1NAC0UUUAFFFFACYxS0UUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAmD60tFFABSYzS0UAJgUYFLRQAmBRgUtFAHx18H8H9pf4wj/AK8P/QK+wwAa+PPg9/ycx8Yf+3D/ANAr7EFABgUYFLRQAmBRj0paKAEwfWloooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAP//T/fyiiigAooooAKKKKACiiigAooooAKKKKACiiigArP1f/kE3v/XCT/0E1oVn6v8A8gm9/wCuEn/oJoA+YP2V/wDkXb//AK7Sf+hmvq4dTXyj+yv/AMi7f/8AXaT/ANDNfVw6mgBaKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA+Ovg9/wAnMfGH/tw/9Ar7EFfHfwe/5OY+MP8A24f+gV9iCgBaKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAP//U/fyiiigAooooAKKKKACmk4NOpCCaGAZpCwHWjGAe1QNPADhpVBHqRSQE4YGlz3qEXFv/AM9F/MUfaIB1lX8xTAm3Ck3CovtEH/PVfzFJ9og/56r+YoAm3Cs7V3H9lXg7mCT/ANBNW/tFv/z1X8xWfq08J0q9xIp/cydx/dNFgPmf9lg48OXx7GaT/wBDNfVobuetfJ/7LUkUfh2/DOB++k4JA/jNfVKXEOMtIoP1FAXLO4UZFQ/aIP8Anqv5ik+0wf8APVfzFAE+RRmoPtMH/PVfzFH2m37yr+YoC5Nnn2pQQelVGntx85mUD0yKnjljlyYyCPY5oC5LRRRQAUUUUAFFFFABRRRQAUUUUAFFFIaAE3AdadmoWYIcu3FJ58WeHX8xQBMCe4oDA8VD5qOflkH51KOnXJoAXPOKM4pM5470gHYnNAD6KTApaACiiigAooooAKKKKACkJxS01j0GOtACB+M4o3jOBULnCnB5APNeEar8TvF0Gu3mm+H/AAx/aS2xG6QzBOvsaqKuTJ2Pf80hYCvngfFD4n4/5Egf+BK00fFL4nZ/5EgD/t5Wq9hMn20e59E71o3rXzv/AMLS+J3/AEJI/wDAhaP+FpfE7/oSR/4ELR7CY/bwPojetG8V87/8LS+J3/Qkj/wIWkPxT+JuP+RJGfT7QtP2Muwvbw7nB/B1v+MmPjDuGM/Yf/QK+xA69q+EPBR+Jfhj4neNfH0vhXf/AMJP9n2xeevy+SMda9oHxQ+JSAIngoEjqPtC0OhIPbw7n0RvWjetfO//AAtL4nf9CSP/AAIWj/haXxO/6Ekf+BC0vYTH7eB9Eb1pQwNfO3/C0vid/wBCSP8AwIWj/haHxOb/AJkgf+BK0ewmL28O59EbqCyjrXzx/wALP+J+3/kSB/4ErWjonxM8U3evWWkeIvDf9li83bJPOD/dHPAolRmtWhKvB7M9zSVWA7E1IDnr1qpGd204zjvVlcEkgdayNR9FFFMAooooAKKKKACms2OO5p1NYHIIP4UAGelG9c4qEkIQoHB61m3+sabpcZlu7lERexIzQBsbhRuGcV4Nr/x/8AaU728F4bm4X/lmEbBP1rhG/aVnOVtNBMi9j5mM0AfWu4DrTS+OvSvk2P8AaRkjYHUtBMEfdhJu/QV6NoXx2+H+utHbrdmO4bjYykYP1NAHtu7OCoyKdWXZ6np97ta1uEcN0AYVpDGTigB1FFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAH//V/fyiiigAooooAKKKKACmt0p1B5oAqXTMLWVlOCqk/pXzJBBq2s3E99JfsiuxCp/dwcV9N3g/0Sf/AHG/ka+ePDoH2ST/AH2/nXdg4KUrM4cbNxV0QN4f1BTgak35GmDQtRKg/wBot+tdMHycmlPy8CvT+rxPJWJmcx/YOpf9BFqP7B1H/oItXTbjRuNHsIj+szOa/sLUf+gg1Mk8PahLG0TakwRwQwweQa6jcaaSx6UewgH1mZwOifD+38OxvDo9yYFckkDPU81t/wBhal31Fs10gYil3Gj2EA+szOa/sLUv+gi1J/YOo/8AQRaum3GjcaPq8A+szOZ/sHUf+gi1KNC1EHP9ot+VdLuNG7jmhYeAfWZnOjQ9RyfM1FmHpzWn8IdQ1UeLPE+g39wbiKw8nyyf9sZrRVd5yPUVk/Cs7viX41X0Fv8A+g1y4yiowujrwdZymfRIOaWkAxS15B7CCiiigAooooAKaTj6U6kIzxQAgY9+KY77cE9PWo3Yhf8AarxP4kfFvT/CgbTNMIudTcYCg9D9elAHqWueJ9F8O25udWuVhQDPXJ/Kvn7xN+0IsYaPwtYfblOQJd23H4GvnfVtR1TxLem+8RXDPNnKpkgD8uKgAQEsE8v29aAOxvPiX8StW3Tf2p9kQ/8ALPaDj8ayx4v8ZY3Pq7bj1+WsVcD5gc0nOSzDg9KAN1fGnjyBxJb6weO22uy0T44+NtIkC6pD/aqN3yE2gda8wHHI4pS3HLfL34oA+xfDHxu8KeIJY7SeT7Ldt1Rs4B/3jxXrqSpOPNt3Dg4Iwcj86/Nae3jki2SHg8grwR+VeieC/in4g8FeXDqMxutLQgEHqgP6mgD7wDbVyacDnmuc0XXtP12xi1DTphJBIucD3regBC5PAPb0oAmooooAKKKKACiiigAprDIp1I3AoBkDgBT9DXzpaO3/AAlWuZPdK+jH+6foa+crX/kadb+qV1YJXmcuNfuG8CQckk596QN3GefelGCuaaDgV7tkeApOw7e3rRub1pMmjJosO8u4u5vU0m+QD5WIoyaMmjlQXl3FLttCg49fejcev9aTJoyaOVBeXcXe3rRvb1pMmjJp2C8u4u9vWjcxB5P50mTRkkGlYLvuO5xjJ496xbnafF/h1yDn9739q2h1NYlwf+Ku8Og+stc2K+FnRhfjSPomMYjA9qmHHFRJ9wfSpq8Jn0AUUUUgCiiigAoziio5OgJPy96AHbsjK81TvbuCziNzcSCNEBJycCku7qOyikuJmAjRSck4AAFfD/xH+I+o+NrybTNNmK6PEcMw48w/zGDQB6B45+ObFpNL8GLvY5V7jP3D9D1r5+vJtW1Y+ZrF69xPnLMCVBz7Co7eKKCIRxpwnUH396mzjp0oAgjtool27A3uRk1KAo4CgCnbqbQAufYEe/NV5bSGb5tgBHpwf0qejkc0AS2Go61o0i3GgXj2kiHJyS+fzr6M8A/HRbt00jxav2eZcBZzyJD9O1fN2DnKGo7i3W7iMcy8eoODxQB+k0NylxEJYGDggEYOeDVxTuGa+JPhd8T7rw5qNvoGtSmTT5jhJm/5Z/45r7TtbiK4gSaBg8bjIIPXNAFqikBzS0AFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQB//1v38ooooAKKKKACiiigAooooArXg/wBFm/3G/lXzn4dP7h8/33/ma+jbz/j0m/3G/lXzj4e/493/AN9/5mu/AfEcGPXum6MFMe9OJ+amL938aefvGvZPFsGR6UZHpSUUDsLkelLn2ptFAWFyPSjI9KSigLC5HpRkelJRQFhcj0oyPSkooCxKOBxx0rI+FRx8SvGv0t//AEGtcdPyrH+Ff/JSvGn0t/8A0GuPMPgR15f/ABD6Looorwz3QooooAKKKKAA8VGTTz0rE1zVYNF06bUbptkUSkk++OKAPK/i98Q18J6UbXTR5uo3YIjUHBGOpr42QT3DNeXkpnupTlpT79se1aura9d+L9buvEF8TtdiI1PRQOP1qkCT1GMUAOYl1CvzikyxOSck9aKKAA80u44x6UlFACEZ60o+Xp0oooAQABtw4NIyMTmP7x655zTqQ4xy233oA6vwP44uPAesRuCzaTIwEyZztz0/WvvHTdVtdTsob2zcSRTKCpFfnJt3BsqI89D1/SvefgT42ube7fwbqjbo/wDl2cn73dqAPrNXJOMfWpM5qsgyrEfePWrAxjigBaKKKACiiigAprDIp1IelJgyF/un6GvnK1OfFOt/VK+jX+6foa+crT/kaNb+qV2Zf8RyY34DdHC4pOozSnoKQfdFe6zwEFFFFFigpaSilYBcD1oowaSgLhRRRTsAUucA0lB+6aEgHjqTWJPg+LvDv1l/lW2Oh+lYk3/I3+HfrL/KufEfw2dGF/iI+ik+4KmHSoY/9WKmHSvn2fQBRRRQAUUUhGaAAnFRswKncOBUh4rmPFevW/h7QbvU7g4VEIH1IwP1oA+cvjf45uJr0eDdLl2qf+Pl1PTuteAwxRwKIxyo6j1piT3V7cT6tfsXubt2Jz6A8fpU+AFC9SOtACEszMSeG7fSlPNJRQAUtJRQAUdsUUUAAwBgUdsnnFFBGQaAGzRibCSnJPfp06V9HfA7x+zI3g/VTiaD/Uux/wBYDyfyr5zb5trDqKkg1KTRNTtNciyDA4BI9CcUAfpJFLvG4DiplbdkdxWHoGpW2raXb6jZyCSOZBgj1xzW2ncUAPooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAP//X/fyiiigAooooAKKKKACiiihgV7z/AI9Jv9xv5V84+Hv+Pd/99/5mvo68/wCPSb/cb+VfOPh7/j3f/ff+ZrvwHxHDj/hNxfu/jTz940xfu/jTz9417J4olKASfakpQDneBnbQAEYUv/DQMFto/OlRSxLqm7d0OcYr5o+J/wC1n8I/hF4nPgvxZeuuqr1jSJ3JyM/wg1EppblRg5fCfSuM4285pSPTpXxZZ/t4fAe4nFvPeXNqZCAS1rNjnpyV4r638O+J9F8XaRb614fnFzYzjMcg7/hRGonsVKjJbm3RRRVmYUds0UhI6HvQBOASufpWL8K/+Sk+NPpb/wDoNbIDdO1Y3wrIPxK8aAdhb/8AoNcWYfAjrwH8Q+jKKKK8Q90KKKKACg8UUhwOTQAhOcivmv8AaE8UGy0i28NRna+pk5Yfw7Dn9a+kyOCa+D/jBqjat8QLi0cbo9Pxt9twoA4CNBGiog2qg6U4fdGetKCFLP1z2pBnYCetABRxnFFI3zKYzwD3oAAy7wp4HrR82M4pskiRRl5WESp97ccDH1Nedaj8Xvh5otw1rfassZQ4yo3gflQB6QGQsQDwO9GGH3hisLQvFvh7xJB9p8P3qXUPbBG78utbp++TjH40AFGSDkUUZxQAhA4xxiprG+Oi6ta61GSHgdQMf7RwaiqC4iEkbRsPlwT+I5FAH6RaVci7sbe4Q7hIikn8K00KkfL0rxb4D63NrXw+sjdvuuoy4cHqADgfpXtCjb8oGBQA+iiigAooooAKQ9KWkPShgyF/un6GvnK0/wCRo1v6pX0a/wB0/Q185Wn/ACNGt/VK68v+I5cZ8BunoKQfdFKegpB90V7x4CCiikb7ppDFyMkHjFN82BFDTTxQ7unmOqZ+m4jNOzhcYzX5x/t2aRqXib4l/CDwdYajLpsWrteCVomYZ2gYyFIzWFapyo1pUuZ2P0b+02JYKt7bHPpMn+NP4K7sg/Q5H51+dsv7DF9a6c15p3jS5iu44/MTO8jIGe7Yruf2NviL4u8Tv4u+HPjC7/tG78GNEgu8AeaJSccD0AqIVRzoJan2v0x70d8UA5j3nqKOCNw6mutmIUH7pooP3TQgHjofpWHN/wAjf4d+sv8AKtwdD9KxJsf8Jd4d+sv8q5cT/DZ0YX40fRMZzGKnHSoIgPLH4VPXz59AFFFFMApGOKWkOOh70AB9K+bP2ideW10K28O42y6oflOemw5r6RByxHpXxB8druXVfHljbTfd0vdtH++KAPMfuhcjDKAAKMBR1yaTcc5k+81OI2nb6UAJS479qSkOeh5U9RQAo+YMy8hOvtQcckcivO/in8Q9L+GvhS68Q6o/+qAEcXeRm4A/Ovmjw7H+0x8TrdPE1nrX/CGabc5MMJjScuvbk8igD7bHzfd5xSc59q+Irbx18avhJ4t0/S/ibM2v6NqjFReKgTbj/ZXnrX25E6y28U6crIoYH2IzQA6jnPBoooAOgI9aZ5fmK0TnIYGn005DA0AfUf7PuoSPoMuglspp5+Qk5++cmvo1ea+Q/gFdNDq+p2xP+s2Yr68QYGKAHUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAH/9D9/KKKKACiiigAooooAKKKKGBXvP8Aj0m/3G/lXzj4e/493/33/ma+jrz/AI9Jv9xv5V84+Hv+Pd/99/5mu/AfEcOP+E3F+7+NPP3jTF+7+NPP3jXsniiUuCylR37UlBBZSMcdz6UAyQBHl24+RSMDpX5R/FLWPCmi/t/6NfeN3ii0tVfzGlUMv+q4yDX6t5Xfuf541IwOma/JT4vfDfwj8UP299I8J+OLM3OmXQfzI1kKE4iyOV5rlxOx1YR2bPqj4hfFH9mJfCupQ3F1Z3QkicRrFCu8sQduNoz1ql+xFBep8JYZ5opIraWWYwCTOdvmHHB5HFdVpP7FH7N2g6guo6X4ZcTQNkM9zI4z2+UnFfS2n6bY6Vax2WnRrDBEMLGoACgfSqo07aiq1OiLtFFFdBzBS8dxmkpcZBoAcAR87Nj2rH+Fhx8SfGjuNoIt8H1+WtgLuHz9a8e07w1438S/EPxZD4U8Rf2AIRBvPlCTfkcdemK4ce/cOzL/AIz7R81c8EEfWlMq9AQSPevlgfCD44YyPiWR/wBui0v/AAqD43df+FmHP/XoteKe4fUvmfT86PM+n518tf8ACoPjf/0Uw/8AgIKP+FQfG/8A6KYf/AQUAfUvmfT86N4PBI/Ovlr/AIVB8b/+imH/AMBBSH4Q/G4c/wDCyznsfsg4oA+n5plEbMhB2qa/PXxfcyXnjfV7kfLvZQR16V7TJ8IvjaIDu+JBfAOf9FUZr58utO1HRtdv9O1a6+23URG+bG3d+FACthmBQbcUh5YntSq2aSgAoKgqWboKKTvjr7UAfH37UHi/xJe3+g/CnwjOYbjxK7CQr1CxkE/pXe+G/wBmb4Y6HpkNrdWxnmdAZnklYAsRk8seOa8n/aIurrwP8WPA3xPngL6dpjzLKQMhfNwoJxX0zrz+HPiT4RktLTVI/st/GpEiyBSMjPqCMUAeI2vwMfwF8UdN8TfDO/it9Lct9ttPtCuG4wuNzfyr6xDq4Dbfmxy3qfpX5MfFb4Y2Hws8aeFY/DviOa/nu5yZYkkZ8YYdcMa/WdMmC3c9TDFn/vkUALSjFJRQAUpUkbc8HrSUoy/Q8d6APpL9nuX95rFon3IPLwPrX02M5PpXy9+z2pGpeIG/gIiwfwr6hXjigB1FFFABRRRQAUh6UtIelDBkL/dP0NfOVp/yNGt/VK+jX+6foa+crT/kaNb+qV15f8Ry4z4DdPQUg+6KU9BSD7or3jwEFLgHikozjn0qWMdycnpivzH/AOCgFv47n+J/wa/4V7eCy10te/Z5SobacDPB4r9Nz8zV8q/Hv4S+LPiJ8Vvhl4s0C386x8KtdG6O4DaJRx1rmxUHJaHRhanK9T5wg8Df8FB9XtlsdU8biCznUKzi3i+4wwentX1x+z18DbT4IeGprGS6/tDXNRO+/vCMGZs5HHtmvoCEP5MUb/djUAjPfFLuOAucqOlOFKzM5Yhy0G47dqX6UUV0mYUh6UtIelAEgHyk1wXi7VrzQ9X0PUrG1N5LEZMRg4zn3rvh901z9zGJPF3h0OMpmXIP0rmxP8NnRhf4iJY/i/4wGEXwqxGOvmVIfjB4xH/Mqt/38/8ArV71FbWyqCsK/MPQVMLaDJAjUfgK8G2h9Aj5+/4XD4x/6FVv+/n/ANaj/hcPjH/oVW/7+f8A1q+g/ssP9xf++RR9lh/uL/3yKQHz5/wuHxj/ANCq3/fz/wCtT1+L3jFwceFWz/10r6A+yw/3F/75FBtoAMmNT/wEUAfPv/C3/GYBB8Ktn/rp/wDWr5t8Xa/qXiXxnf3upWR0+QbcITu7V+iZtrdfmESkn2FfD3xss5NL8fLOybYr77uB12igDzoMG3dyentRgjg8kd6Vgq5K80mc8+tABRjdwBk0UhxjJGaAPiH9r55HvvCNvdk/2fJMfPX+Hhhtya+vmlk07w5FPoVqLowW8Zjtw20Odo6GuT+Lvw10/wCKvg258OX8ohmba0MwGTGyHI6epr5b0/xp+0b8KYR4c1Xww3iWC3+SO5Eqx5Qfd4HtQBZ8dftG/EXwrAuqeMPhcsenRzLH5r3Kvje20EDFfaWi3w1HTbe+CeWZ40fZ127gDivg/XtB+OH7RDQaNruif8ItocciSSAusudrBh79q+9tLsl03T7bTwdzW8aIf+AgCgDQooooAKOCMdKKCQPmPagD1/4H5bxTLjgDGfyr7PUYJPrXx98B7VpNfvrgDiPb+or6+jJLNntQBLRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAf//R/fyiiigAooooAKKKKACiiihgV7z/AI9Jv9xv5V84+Hv+Pd/99/5mvo68/wCPSb/cb+VfOPh7/j3f/ff+ZrvwHxHDj/hNxfu/jTz940xfu/jTz9417J4olA657UUUAPD7TkduleXy/Bz4dT/EaH4tS6YW8VW2fKuvMPy7htPy9Olem0VLinuVGTWwpxuBUYA7UE5OT1pKKokKKKKACjoc0UUAS4z19qx/hWW/4WV41ye1v/6DWwOn5Vj/AAr/AOSleNPpb/8AoNcWYL3EdeA/iH0VijB9aWivEPdEwfWjB9aWigBMH1prZA60+kPSgCJgWyMcYr4C+JVs1j8RdWaVNqTFNp/Cv0BbgHnFfIP7QuivZ6rpviCMfuG3CYj8hQB4jj5mC8hab15FHzL8idhlvxpBjaGXoaAFpDkjApaMkdKAMLX/AA5onivSptD8QWq3VpcDDqev4HtXyVq/7GNrPcuPBviybw9YMc/Z8NLnPbJNfaRYd6Qhe9AHzp4B/Zk8D+BbhdW1MtrmspgrdSM3B/3TkV9GDftG9s8YHsBQM0mQaAFooo4PBoADwM0oVgpAONwJ/Kk68CmPDcXQW3t+ZWdQAPQnmgD6u/Z5sGHhQ6y67WvCR/3wcV9BISR83WuY8H6LBoHh200u0GEjQH8W5NdQAASe5oAdRRRQAUUUUAFIelLSHpQwZC/3T9DXzlaf8jRrf1Svo1/un6GvnK0/5GjW/qldeX/EcuM+A3T0FIPuilPQUg+6K948BBQeQR60UUhh3zT42VA3HJ6c0yigAVUHLjJpSSQAe1JRTuKwUUUUhhSHpS0H7poAeD8pFYc3Pi/w56Zl/lW4Oh+lYk3/ACN/h36y/wAq58T/AA2dGF/iI+iUHyKfQVKox15zUcf+rFTDpXz574UUUUDCkPSloPtQAmOK+XP2jNFkmtdM8RZzHppYPx13nAr6krh/H2gL4l8MXulYzvXd+K80AfBC989wDikHKgjoagtpZPMa2nUpcW7MpU9gDgVMORkcD0oAWjntwaKKAFG1CWhG0t97vmo2RZMecof6gGn0UAAJRdkWEHsMUAAKP73c+tFFABRRSj3oAQZPanDBRo24J5H4UxiQflpwt57y4gtbUbp5WCqB6E8/pQB9Nfs/WTNZX+sqv7i62iNvXbwa+kY87cngmuT8E+Hrbwx4ctNJthtSJc/i3J/WusjJI+bg0ASUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAH//0v38ooooAKKKKACiiigAooooYFe8/wCPSb/cb+VfOPh7/j3f/ff+Zr6OvP8Aj0m/3G/lXzj4e/493/33/ma78B8Rw4/4TcX7v408/eNMX7v408/eNeyeKJRRRQAUUUUAFFFFABRRRQAUUUUASjp+VY/wr/5KV40+lv8A+g1sDp+VY/wr/wCSleNPpb/+g1x5j8COvAfxD6Looorwz3QooooAKDzRRQAhGeteffErwsninwrdaaBhyNynryvNehUx1J9x6UAfmapuIpZLO8j8i7tztkQ+nQfpU7YDbRwBXuPxw8Cz6feN4z06IvbuR9pCjkdhwK8LVopFDRH5D0HpQAp496CDjrQG29aKADGaBxRRQAEk0YHYUUUAFKoDOF7mkpDgjbjBP8XpQABgDuPFehfCjw9ceIvFxmVc22nkFyRwdw4riLaxutUuorKxXfLcnCqO/r9K+5fh/wCFIfCHh6DTgoEgGXfHLE88/SgDuIdkcapH0UYqwCDyKgRAF2pwKmXOT6UAOooooAKKKKACkPSlpD0oBkL/AHT9DXzla/8AI0a39Ur6Om+6foa+cbX/AJGnWx7pXXgnaRy41e4b2OKaBxThytIDgV7lzwFFhg0YNO3UbqLlcshuDRg07dRuouHLIbg0YNO3UbqLhyyG4NGDTt1G6i4cshuDQV+U07dQTlTQmLlkAHUVizjHjDw79Zf5Vtr1NYdyP+Kw8OfWX+Vc2J/hs2wz/epH0VH9wfhUwqtGvyCrA4FeB0Po2haKKKYgooooAKgcfKQoznqKnpjCgD4r+Nng9vDusv4oso82l4R55X/lmRwOPevJUPmEHuRnNfoRrWh2Gt2Nzp9/EGS5GCTzyOlfDnjDwdq3gXVngvIy+nyHMc/t9KAOcQeYTs5xSc4z2pu9HbIPyt/EKcQwO1zkigAooooAKOgzRQfumgA/hzQASMik/gpVEeA0nAHf0oAABsMhOEXqfSvbvg14Ml1O9j8T3S4ggP7rI+/ng1w3gjwVe+M9TVEYxWUJBmcjg+gr7i0TSbLRNOi06yiEUUQwBQBpRJhAOmOlSqu3knJNG6nUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQB/9P9/KKKKACiiigAooooAKQnAzS01wSOKAK143+iT5/uN/KvnPw8R9nkPbe38zX0PdYNvNt+Zgjfyr5WtfGXhzQmmsdWlkimV24ETMOT7Cu7ANX1ODH3asj0EBcYBoJ5zXFL8SvBR6Xkv/fh/wDCk/4WT4MB5vJf+/D/AOFet7WPc8hU5djts0Zrif8AhZXgv/n8l/78P/hSj4k+Cz/y+S/9+H/wo9rHuP2cux2uaTPPtXG/8LI8F/8AP5L/AN+H/wAKguPif4Et4jPc6lJDGpGcwPzn8KPax7h7OXY7ksBx60ZrjP8AhZfg0sCbyVlI6+Q/+FN/4WT4KHIvJef+mD/4Ue1j3D2cux22aM1xP/CyvBf/AD+S/wDfh/8ACj/hZXgv/n8l/wC/D/4Ue1j3D2cux22aUDIJ9K4j/hZXgv8A5/Jf+/D/AOFKPiV4Lzn7ZKfbyH/wo9rHuHs5djvFUtg9jWJ8K/8AkpXjUe1v/wCg1z//AAsvwMoLT3syHIwPIf8AwrU+DF6mreOvGGrWyOLW4+z+WzKV3YHvXJjqkXGyZ2YCm1O7PpiiiivGPZCiiigAooooAKQ5yKWigCjdWkV1FJBMgdZAQQRkHNfF3xF+FV/4YuJdV0KIzWTEs0Y/5Z+v1r7bKnduBqKeCKf5ZVDA8YIzQB+acVzDdwq8HJ6EHggj2qYnBxX1V41+COmarczapoL/AGO4l5kUDIc9vYV83694M8YeF5PL1HT2kthnZKDnI+goAxSCOcU0kAFj0FV45knOxFbeOoZSP51I8qqNu0bh2JoAnI6Y6Hp70gG7gdTTVwCqq27HOBzimLMJmEUMMjXchxFEFOHP1xgUASDJyB970qfT7W81e/XSNLjM1xKcAAcfnXqPhf4N+KNcdLnX0/suAcheH3A/Svpnwn4C0PwfbFdNgHnS43yHknHpnpQBxvw1+GNt4VhOqaiPN1OTBZiPu/h0r2mIpImVHy0fdHXbUqADgDAoACucg9KVVCjAp1FABRRRQAUUUUAFIcdKWkOMjNAEU2dpI9DXzdZPGfFGuktggpX0kyggkng15Tqfw2a61O41CyvPsxucbvlznFb4aooO7MMVTc42Rho6MpOR+dICMdR+daf/AAq+9K4Oqn/vmmj4XXeMDVD/AN816KzCJ5yy2Xcz9w9f1o3Drn9a0P8AhV15/wBBU/8AfNH/AAq68/6Cp/75p/2gg/s6XcoBlPcfnS/LtJyPzq9/wq68/wCgqf8AvmuL+IXg/VPDPhi41q11QmS328beuTin/aEQ/s2Xc6UlQMk/rSF0zwQfxrA8DeDtV8T+GbTWLjVCskucjb6Guv8A+FX3hP8AyFT/AN80f2hEP7Nl3M/evqPzo3D1/WtD/hV15/0FT/3zR/wq68/6Cp/75oeYRD+zpdzP3D1/Wl3DB6fnV/8A4Vdef9BU/wDfNKPhdef9BU/980v7QQf2dLuUFYbS2R+dYdyR/wAJh4d5HBl/lXV/8KuvNpH9qn/vmrenfDJLXUrbU728Nw1rnYMY61jWxcZRaRtRwTjK7PUIiSAAKsqQcgdqhSNABs4xU9eXHY9IWiiimAUhGaWigAprLu9jTqKAIBAo/HrWHrvh7SfENnJYapCJYpBg5/xro6gdA3DdPSgD4l8X/BzxF4bnkn0Bft2n5JCdCg+vU15Kl1CsklnJuSeE4ZWBHJ9zX6YmONwEkXgdO9cD4o+GHhLxX+9v7RfPX7rr8uPy60AfDDAooZ+h9DmkGScLyT0r6N1D9nrY27TdR8teylc15h43+F/iLwnodzrT3fmrblQPlAxuOKAOA6Y38E0KQ4yOnrXp3hn4QeIPEWkQaq135YmGfug16Npn7P4WJBqOoeZt7bcdaAPmZpVMqWUQaS4kOFVQTn8RXsvhP4Na3rbxy6+htLYEEx9d469R0r6O8M/DXwv4WXfptsomb7zt82fzrvUTaMLwBQBlaPoOm6JYx6dYRCOJAAAOv51sICo2k5xQF2nJNKM5ORQA6iiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAP//U/fyiiigAooooAKKKKACg80UUAM28YFZ8mnWUjFmtomz6op/pWnUfPai/YT8zOGmWI/5dYv8Av2v+FIdMsv8An2i/79r/AIVpjdijBpeoJ+Rmf2ZZf8+0X/ftf8KVdMsv+faL/v2v+FaWDRg07ruPm8jP/syx/wCfaL/v2v8AhXg/7QltDaeBnltYY45BNCAwRR1ce1fRGDXgH7R+5fh5M47TQf8AowUXXcfN5Hrml6bZNplqfs0WTDGc+Wv90e1X/wCzLLH/AB6xf9+1/wAKNGJbSLNv+mMf/oIrTANK67iv5Gb/AGZZf8+0X/ftf8KP7Msv+faL/v2v+FaeDRg1V13HzeRmf2ZZf8+0X/ftf8KUaXZE5+zRf9+1/wAK0sGjBHSk2u4m/Iy/7KscnfaxEenlr/hVu2tYIM+VEkeeu1QM/lVnB60qk96WotOw6iiimMKKKKACiiigAoxmiigApCMilooAiaINz3FRSWkMo2SorqezAH+dWqM4oA43UfAfhfU8m7sVYn0+X+VfO/x5+HPhTw98PrvV9JtDBdJLAocMTgM4B/SvrqvAf2lf+SWXv/Xa3/8ARgoA6Dw78KPBEWnWl3FY4kkijZiWJySoNd9Z+HtI005s7SNc+qgmrOgf8gSx/wCuEf8A6CK1gcCgCtHEQACasFQSD6U6igBgRVyR1NOAxzS0UAFFFFABRRRQAUUUUAFFFFADNgIw3NKUBp1FACBQOlLRRQAUHiiigBOoryn4xZ/4QHUmHJG3+derjivM/i3D5ngPUl9gfyoAp/BljL8P9Pkc5Pz/AM69WAx9a8g+BMnnfDXTn/2pB+TV7DQAUUUUAFFFFACYpCpIxmnUUWAbtzxSgYpaKACiiigAooooAKDzRRQADimFAWDHqKfRQBH5YGdvGacF2jC8U6igCPBB5Oa8a+OyKvw21Jh3aLP/AH1XtBGa8a+PIx8NNR/3ov8A0IUAdJ8MBnwVp2OBtr0DBzmuA+F3/Ik6d/u16DQA3bjp0pQoAxS0UAJgUtFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAH//1f38ooooAKKKKACiiigAooooAKQDFLRQAUUUUrAFIaWinYBMH1r5/wD2kjj4Z3RPaaD/ANGCvoGvn39pXj4WXr+k1v8A+jBRYD2vQ/8AkC2Q/wCmMf8A6CK1lORmsjw+c6JYn1gj/wDQRWuOOKLALRRRRYAoPNFFFgCiiigAooooAKKKKACiiigAooooAKKKKACkIzS0UAFeA/tK/wDJLL3/AK7W/wD6MFe/V4D+0r/ySy9/67W//owUAez6B/yBLH/rhH/6CK1gMisnQP8AkCWP/XCP/wBBFaw6UALRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABXn/xNXzfBeop/sV6BXFePo/N8Jaiv/TJj+hoA4f8AZ7fzPhdprf7c3/oZr2weteCfs2S+b8J9Mb1lnH5Oa97HSgBaKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAK8a+PJz8NNR/3ov8A0IV7LXjPx4/5JpqP+9F/6FQB0vwu/wCRJ07/AHa9Brz74Xf8iTp3+7XoNABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAf/W/fyiiigAooooAKKKKACiiigAooooAKKKKACiikJxQAZPpXz7+0yD/wAKm1DaMnz7b/0YK+gd1eE/tGr5vwsv16/vrc/+RBQB654cz/Ylip7QR/8AoIrbHU1z/huYSaBYN6wp+iit9SCOKAHUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAV4D+0r/ySy9/67W//AKMFe/V4D+0r/wAksvf+u1v/AOjBQB7PoH/IEsf+uEf/AKCK1h0rJ0D/AJAlj/1wj/8AQRWsOlAC0UUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABSGkJxTck8A0APyfSuV8Zjd4Y1JQMkQv8A+gmuge4ii4kcL9a57xJfWR0O/QyoSbeXA3Dn5DS17BZdzyL9l+QP8HtMkJ4E1z/6MNfQynIr5i/ZWvbeH4PadFcMsEhuLr5GPI/en1r6RW7t3YiKVGPswptNdA+ZeyD0oBzxUO8OuV5Ipyk4z60AS0UUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABXjPx4/5JpqP+9F/6FXs1eM/Hj/kmmo/70X/oVAHS/C7/AJEnTv8Adr0GvPvhd/yJOnf7teg0AFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQB/9f9/KKKKACiiigAooooAKKKKACkJpaQ+tABnnA5phkAbbTSRnrgmsrUtSs9Ntmnv5RGi8nnmlreyQm7as1vNHOeo61TutUsLRDJczKgHqRn8q8M1L4h6tr921l4TBitV4a6I6f8BNYL+Gv7RkEniC8a7uBzuGVB/AV1Qw0mclTFxWx6vf8AxW8G2LmJrotIOyox/lXkXxT8Yx+NvBt3omkW7O8rxspwRnawPeuhtdJ03TlxbxBcdyN386vgELuSNfrgCu2OXrqzkeYS7Efh34kwaZo1pY31qyywoAw5OMCumsfi/wCDLh1ikuGjlbjaUbH54rmwoCGRVU7vvcCo5rO1uI/JltleL1AANN4CNtAWYPqj2my1rTr9BJazoyn/AGhn8q0RICMjp618yHwlp9vJ9s0eV7WYc7txYD8DWlH4w8W+GMSawp1PT3IDSjClB9Bya4qmEktjspYuMj6IMnHHWpFORXKaLr2m69CktrMHDjO3oRXTxNkeoHeuaasdd10JaKM5opAFFFFABRRRQAUUUUAFFFFABRRRQAUhJz0oJApDjFABuBOBXgf7S21fhVfO5womt/8A0YK975xgcV4D+0owHwsvw5yPPt8j/toKAPZtBYjRLDA/5Yx/+gitodKw9CA/sWx/izDH/wCgitlSASoGMUAPyfSjNGc9KM460ALRRSDPegBaKKKACiiigAooooAKKKKACkJwOKWmOQoyaAE8wHGOlAlU4x0NV+nfk/rXlXjD4gRWE39h6HH9q1OXjaDwvvnpxTjFydkKUkldnf634j0jQoGuNSnEap1HU/kOa8qv/ibqV+mPDGnmeJ+BOW27ffBrl4/D811Ot94guDeXXUseAPbb04rqAvkqEVBDH/DjvXqUsDpdnl1ca9kjmvs3jTU8zavre2Nv+WQQcfiKjPhSxkys0jyB+Gyx5rqCyNwOTTz90A8YrsjQjtY4pV5M4608EaJpsHkWiFFyThWIHPtVpfDc1uRPpl21u65wSS2PwJrpQQeppRgHd1I6VXsIoSrS6HPafrnxC8PzNLc3X9vQf3Noi2j613+ifE7RbqWOx1JTY3T9EOSM/XpWCMOdwO5vTpWbf6ZaamjW99bj5uhHB/MVyzwMXqjqp46S0Z9ARXEUyh4WDqecg5p6Sh+e3avmyy1TxD4MKy2BN/p6n/UngqO/J5r2/wAP+I9L8SWa3ulSh1b7w6EHuMGvMq0ZRdj1KNeM1odOGBGRzS5BOKgC5X5eCKnFYmotFFFABRRRQAUUUUAFFFFABSE4HFLTHxj5ulADtwpN3pUZxkq3TtWfd6np9mhN1MibexYD+tAGpuA614z8eWX/AIVpqPP8UX/oQrT1P4u+BtGyLy+C49AW/lXiHxX+M/gnxV4RudD0a6aeaZlOPLYfdOaAPoH4YMF8F6ep/u16DuGcV8n+B/jn4R0Pw7a6TrUzQSRDGdhb+Vep6Z8afAWryCGy1D526AqRn86APXN/y59KEdXAZehrB07WNN1GPzradCo9GBz+tbkeeWPHtQBLRSZFL70AFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAf//Q/fyiiigAooooAKKKKACiiigApjnApCax9Z1e20Wxl1G7bbFEOfr2ppXC5keKfFGmeGLb7XfSfvP4FHUk/SvEDaav4qvDq/iFikDnMdvn7o+o9aIJrzxbqZ8QaohFqSfs8R/hxwT+NdYNqfd7dvSvVw+Gt7zPHxWL5tERrbwwRrHAoQDrgdakwOi9KQnNGa9GyWx5w8ZA4phHzbm5NGTRn15obbBIXdhsqMA9qQEAYAxRkelFJbjEIDfe5IoEavwy7vr0/KinIcN1xVuwHJ3uj31jIdW8NzG0u4jkJ1BHfr7V6x4L8a2niCNrSU+VfQgCSI9j6575rlP4/Mb746VzWtabJbTRa9pY2X8JyVX+Id8/hXnYnCJq6O3DYtppM+k1bgbupqRGDDI5Fch4R8T2XiTSY7y1PzqMOh6gjg5rro2Rs7a8dxs7Htp3V0SUUUUAFFFFABRRRQAUhOOKWmscdqAEDHPSkD5JPYdKid2Vdx49a8F+IvxhtPDLHSNCjF7qL5BVW4Q+uelAHr2s+I9J0OBrnVrhYFXnBOT+VeI6z+0LocOf7DtjqDJkdSn86+ZtXv8AWvEl19s8SXjTSE5CjgL7cdajAThFQIOw9KAO+1b41fEbWJjJp3/Epj7dHrh/EXiDx34usG0zX9d863chtvlgcqcjpVfaqPhmyKUp82e1AG9b+O/ibp8Edtp/iHYkQAA8oHgV22g/H7xfpKtBrNh/arHA8zcEx+FeWZUtkcUOGdSMZoA+tPD/AMdfDOpulvqj/YLh/wCAgsPzr2ix1C21GBbi2lWRG6EHNfm/Jbwzjybj5B2A6n8a6Hw34v8AFXg2VW0WVp7YH54GPb6mgD9DlfPHpT1YNkdxXl/gf4j6J4309TZSCO4UfvIzwQfx616Vblym5xtJ7UAWKKKKACiiigAooooAKM0U0jv3FABuA60jnHbJpjMyruI5ri/Gfib/AIRvRJr5+ZWwsa9yW4ogm3YTdtTi/iD4tvUn/wCEf8MH/T5eJJh/yxH075FYGkaJBpEI582ZuWkPJJPWq2g6RcW8Muo6i/n6nd/NITxgdv0re+Q/6s/L6ele9hsOoK54WIxLm7Dtw6kc9qbhc570UV0tHKKDg5FDHJzSUUkgYU5W28jrTaKpgOLbjk9aCxZSD0702l57VNmAE8E/3uG965WWG88Laiuu6GT5JOZYR0YV1XfBoOxjtIyuCD+NTUpqSsxwqODuj1Tw7r+n6/p0epWDh1kHI7gjrkV0INfNeg6hH4K8RogJWy1I/Pn7qkdPzNfRsJyoZTlCAR+NeBXpOMrH0VGqpR0LNFFFZGoUUUUAFFFFABTWbbjPSnU04yM0AIXUdaz7/UrbT4nuruURRRDJJPWqut6va6LYT3944ijiGSSa+GvG/wAQtV8eXjwRSmHSlJCKDjdjrzQB6r43+PG4y6X4Rj82YcfaM4CfgeteA3up69rQ83W757mU5O8ZXr7CqiQJGqwBcIvT/wDXUxOWNAFRbKADDAufc5qwkUKY2xrkewp9FADdqnllUn6CojaQN0GxvUcfyqel4Py9zQAWct9p05k0W5ezI5GWLDP4mvZvBHx11jS1XTPGQNwinH2rpx2+UV4uUA+UnBpzBpF8rAYnoPWgD9DtF1vTPEFml9pdyJo3GeOv5Vuxn5RzkV+dXhLxZrHga++26U7fZMjzoSc5H419yeE/F+m+LdHi1TT2D7x8y55U/SgDsy2Bkc0oOagjKsA69GqdRjigBaKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigD/9H9/KKKKACiiigAooooAKKKa3SgBrc18/ePNXm8QeI4fDNrza2xzdAdOeVr2zWr+30vS57y6fYiKeT6kcV87+F45bm2m1G4GLu8cl2PcKfl/SurCUuZ3OPGVeWNkdQsaRLsxu2gAAcU/BCjd1oJbIIGSvWmk5Y17drHiN3CiiimmIKKKKq4BRRRQAUYUjDciiimgHKSOB0py4UlkX73X3pg4pwJzxUSV9BN21Of0y9i8J+KI5wNllqZxcNngFfu8fWvo2F1ZBIhyGAI+lfPmuadFq2mSWbcHhge4K816b8O9VfV/DlvPM2ZVyrD02nAryMwocrvE9rA1+ZWZ3pOKWkIzS1wJneFFFFABRRTScEUAOqGVwCAOtS81578QvFEHhHw5d6lMQZMYRe5J4oA8x+MnxRl0SF9A8OPnUpxtMgOfLHfj3FfLEFuIGMhYvK/LsxySTz3pVa5v72bVNTkLz3JJZz2HYYqYZ/iGD6UAAVQ+9etOLM3LHLetJRQAoZx3pOmcd6KKAEwKXtxwaKKAFUhWL4yxpvRST070tH1+73oAZbXN/pNxHqujyGCeAg8fxD6V9x/Df4iWPjXSwciO9gAEsWeQf8A69fDwVn46Y6CtTwvrz+EfEVtrVsxSNmxOOxzwKAP0YjlEgyKerZ6jBrM02+t7+yivoHDxSKCCPcVpJ0560APooooAKKKKACmk45p1MfjknigEMMgAZiflA/KvnDxFczeJvGrQu2610c9O0m8f0r3/UriK1064mY4VUbn3xXzz4Qk+0ac2oSL++uHfcT6BjiuvA0ryuzgx1bljY6VVOBz93pQWJ49KXJU/WkPr617iXQ8a99RKUmkopgFFFIoJOKAF4B+lHFOGCF4+91/Cm/higAooooAB1zSBdxKt9xuopaMkDpQwMzWdKg1jTGs5l3KPmz0OV5HNeh/DbXJdX8Pxx3bbry3ysg7gA4X9K5AxuTtQ8NWZ4Kuf7C8bXVpu/dapjYOw2DmvPx1PS534GvaXKz6HzgCnZ5xUIIXC+tTY5rxkeyLRRRTAKQ0tIc0AGeM1DLKqIXfhFBJPpipSccAZryX4v8Aik+GvCNzJG+25mAWMdyCcGgD5y+LnjmTxjrsuh2EpGl2Zw4Bx5xPv2wa83EUcf7tV2pj7tVrSJEi8w/eYlifUmrZ44blu9AAuFBX+H0pOcYoooAKKKKACj3FFFAAcNy3JpMHtS0YJoATnp0XvXR+CvFlx4H8QRX0chFlcsFuB29BxXPHkYNRS26ywPCRuLdB9KAP0isbmO5tYp0cSJKoZSOnIzV5CTy3HtXzZ8BPEc9xp8vhy+lMv2T/AFZPU55P5V9JxjuepoAkooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAP/0v38ooooAKKKKACiiigAqKYEpxUtMc4GaTVwPGPjLcPPokPh+ElJL9lIcfw7CCeKzYIVgs4oV4IVRn0wOatfEIfaPFOkK/Kx7+PqKjb0r28BD3TxcfP37AzfOGXgdx60wAD60tFdzOBIKOTwOtKBmlPyr0zU21GJ8pKqpyWpGZI0LucAVj+Jte0/wroV34k1Nwtvp8bPITwM4+UfjX55+GfE37S37SF5c+IfAurHwZ4XMjJDKY1m3hSVzg89am9i4wufpISFALHr6Ud/bsa/OPxfY/tYfAiFfGV34nbx5pVq6CeFYFhIVyB2yeK+8PBHiVfF/hix8QiMxG7QFkYEFWxyOfeiM7sqdK2p1lFFFaGQUopKUdKAFbG12x14x9ar/DG9bT/FGt6JO+IlMZhHrkZNWgAHx2rnLMm1+IOizxji78zf77RxXFjo3idWAn71j6UDgsRThkjnioEZX/eYwanHr614dj3haKKKYBRRTX6ZoATd1z2r4o+OviKbV/E0OgRHMFiT5oB+9u5H5V9o3LeVBLLngIx/IV+dXiG6/tLxTqepA7hMwA/4DxQBnHaHVc/KB0pOny+lGEUZbrRjv60AFFFGFzk9R2oATcoALHGaVuMgcn0qO5uLa2t2vL1giKCSxOAoFfM3iL9qv4aaFqEmnWrSalJCcFo43Iz9QCDQB9OHKjLDp1pxA6qcg14L4F/aI+H3jrUo7C2uDbX8nAjlVkz/AN9Yr3cFMlYjuTqPxoAdQDtbJ5HpRRQAxs7Rnr60s8STKY5F3JKOfYjpT29KTccbe9AH05+z54huZ9Fl8N3j73088OerBjn9K+j1ABLDqa+JPg1qRsvG8VmThb3OR/uivtzIIyKAJKKKKACiiigAprAEYNOpGOBQB5B8adRn0jwDezWjYlZ41X6FsGuc0q1FjpdvCOpQN+JGat/GtzPZWGnH7lw2SP8AdINKqkRxr2CKP0r1cArI8jMnrEQE9+aKXGKSvTPOuFKBuOBSUvbgc+tS2NCAqDiQ7ccmvlb4nftW+Bvh/wCIP+EQ08tq2uZw1vErMFPXllBFe8fEXWLrQfA+q6taHLW0LhO3LAivlH9jH4f6JN4Ol+ImtWiXGv6/NKZLiXEhHluQuAc44rGo2tjWnF*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n7Dj/vivsNACM18mfCsCL9oz4qtj/W/Yv0WvrRBxQA7HOaWiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA//0P38ooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigArJ1rDaNqAx/y7y/+gGtasfW+NG1A/wDTvL/6AaAPnj9lCQv8MYhjpcXH/ow19PA55r5X/ZIfd8M0HpcXH/ow19U0AFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAU1hkYp1FAHyh8OAI/wBob4ikj/W/Zf0Wvq1eRXy34KUQ/tBeNW/56/Z/0WvqRPu0AOooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAP//R/fyiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAE6CsvWedHvwB1t5f8A0A1q1mar/wAgy8T1hk/9BNAHzJ+yV+68BSWp6xTz8/WQ19WA5Jr5S/ZaxFoupWn/ADzmf9XNfVqrgmgB1FFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUh6UtFAHy54ZG34+eJm/56eT+i19QJnHNfNOkoIPjtqzf89dn6LX0wOlAC0UUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAH/9L9/KKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACjpRTWByCO1AC5ozUW5S3H3h2qtcX1naruuZliPuwoAvZrO1L5rG5wOPKf/wBBNcdqXxI8GafmK7vwCOuBn+VcXqHxz8AwxSW0d2XZlYD5T3FAHDfs2Yin8QWwPMcv82NfViuf4hgmvhb4QfEHw14V13X7rVbgpFqDqYflPYnNfTtj8T/BV/tSO/GZOgIIoA9MMqhtp61JWPZappl8B9iuUkHoGBNaoA/CgB9FJkCgHNAC0UUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFNZtvHUmlyKa3I45oAUtge9NWRW6ViaxrWlaKn2rUrhYgBwCa8D8U/tDaZZlrLwvanUrnkHkoFPbk0AfTO4DrxUb3NvH9+RV+pFfBl98VfiLqQaSS8/s7d0iAD/AK1ztz4m8YakgW91dn+gxigD6AjlhX42zTpIpSXHOR2WvpSOVOgYH8a/MyFL2C+/tKK7YXP9/k111v448e25WOHWCVX1UUAfoQsqMdo7U7dz04r4o0v45eL9HlVdUtf7Uh7vuCbR9K988KfGDwj4lARLoQ3HG6NgRgn3NAHrO8bgPWpM1WV451EkLB0Poc5qWMjG0cYoAkooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigD//0/38ooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigApCwBx3NLTHOOgyaAFLAYB6msvUtUs9Mhe6vZBFFEMliaz/EfiXS/C+my6jqswjiiGffPYAV8M+LvHut+Pb2SWR2t9NUkJCD98fWgD2nxd8fraBpbTwlbfbX6GXO3b+Br561LW/EniO4e91zUHmDH5Ix8uz2461UW3igVUiXA7L/9epGxuPr3oAri1twM4Yv6liad5KMMOobHTipaKAIzEhG0qMDpx0pBEgZWOcj0OKloxQAlpc6po8pvfD969rcZzySw/I17j4S+Peo2aRWXiy3LKvDXOev/AAEV4cefuil2swKnDjuKAP0N0LxDpXiC0S90u4WaNx2PI/CugU8e9fm74d17VvBV8NQ0KZkSQjfFksDj619teA/H2meMrASwuEvEA8yMnoaAPS80VDEZDnfUoORmgBaKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAprMFGTTqjkzjcO1AEZPOG4z0rx74gfFrSvCUclrZgXeoKMCMHGCfeqfxY+Ji+ELAadp5Euo3QIQD+H1zXx2DJLOb3UGM9xISS596ANLWdZ1/wAXXZ1HxLctMrHMcAO0J+I61U2hMImAV9ufzp7bl+bru6Ug9D170AB9V+960o29SMk9aSigBQcHH8PpTTk5HY0tFAAeVwKgkt4pVwwO8dCp2/yqejJByKAPQ/APxY8Q+D5vsWtym/0tiBGTwYR39zmvszQPEel+I7CPUNJlE0TjPuK/O0LGwZMZHcGun8GeNr/wBqSXGS+mOwEseemelAH6DrKDk4+X1qQHNYmiaxZa5p8Wp6fIJYJ1BGO1bEfcE5NAElFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQB/9T9/KKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoziikNACbs8gcVnahqdrptm99dMFSME5PtV8plMZxXy/8e/GLW9tB4R0x/nuyfNIPK7ef1oA8Y8feNbjx9rhuWJTS7diIlB4bsf1rmz1MZ7YwPSo4oljj8qHjHb+dOG7HPTsaAAKB0pec9eKKKACiiigAo470UUALmmhVBzjmlooAXcwB28E1c0TW73wtq8Gq6cTwcyoDw4/+tVKg7dpyMmgD9BvCPinT/FmiwatpzhlccjuCODXTBjnmvin4KeKBoniH+xJ22W2o/cUnhStfaURIGSc5oAsUUDmkAxQAtFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFNbOOOtACFj2GTXL+LfEVt4d0G61a4+7CvAzjJPSunIxnHU18gfH7xPJfana+ELJsQxkm5x+a0AeJ6jqt94i1G58QalkzXbfdP8IU4GPwpThTs6rTT8o6YAAApBkDB60AOHHHakoooAKKKKACiiigApCNw2npS0UAI3zgqfu+lK251KHlfSikO4crQB7J8EfFo0nX28KPLttrn/Uox4XHLcn1r7IiYMSR+dfmZMsqTW91YsYruFgyuPQHJ/Sv0F8A+IU8TeGLPVV6uu0/VeKAOzooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAP//V/fyiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKaxAHNOprEAZNAEM8vl28kzcBFJ/IV+dP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ooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACkxS0UARPFv5J5HSmtbo67HAZPQjNT0UAY82haZOhikt4yh7bRWBL8O/CUxy9iua7eigDhY/hv4QibctiufrW1a+GtJs/9RboMdPlFdBRnFAFNbcRcQhUHcAAVMqE8E8VNRQAzYMcU4DFLRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAIBiloooAaVDDDUbQBgU6igBpUGm+WucipKKAI/LPY0qpjOec0+igBm3n2pcY6U6igBpUE5NKAR3paKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAP/9P9/KKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACjGaKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAP/Z" alt="" width="353" />
 
go并发调度模型如上图
M指的是Machine,一个M直接关联了一个线程。
P指的是Processor,代表了M所需的上下文环境,也是处理用户级代码逻辑的处理器。
G指的是Goroutine,其实本质上也是一种轻量级的线程。
 
⾸先是 Processor(简称 P),其作⽤类似 CPU 核,⽤来控制可同时并发执⾏的任务数量。每个⼯作线程都必须绑定⼀个有效 P 才被允许执⾏任务,否则只能休眠,直到有空闲 P 时被唤醒。P 还为线程提供执⾏资源,⽐如对象分配内存、本地任务队列等。线程独享所绑定的 P 资源,可在⽆锁状态下执⾏⾼效操作。
 
进程内的⼀切都在以G⽅式运⾏,包括运⾏时相关服务,以及main.main ⼊口函数。需要指出,G 并⾮执⾏体,它仅仅保存并发任务状态,为任务执⾏提供所需栈内存空间。G 任务创建后被放置在 P 本地队列或全局队列,等待⼯作线程调度执⾏。
 
实际执⾏体是系统线程(简称 M),它和 P 绑定,以调度循环⽅式不停执⾏ G 并发任务。M 通过修改寄存器,将执⾏栈指向 G ⾃带栈内存,并在此空间内分配堆栈帧,执⾏任函数。当需要中途切换时,只要将相关寄存器值保存回 G 空间即可维持状态,任何 M 都可据此恢复执⾏。线程仅负责执⾏,不再持有状态,这是并发任务跨线程调度,实现多路复⽤的根本所在。
 
G自己提供内存栈在M上执行
P保存P执行过程中的数据行,当G被暂停时,SP,SC等寄存器信息会保存在G.sched中,当G被唤醒继续执行时,从之前暂停的位置继续执行,因为G提供内存栈,并记录了上次执行到的位置,G数量很多,P相对较少,在垃圾回收的时候方便定位
P中有一个对列保存G的指针,其实就是一个256个元素的数组,通过两个变量指向对首和对尾,所以这个队列是会出现满的情况的,满了新加的G就只能放到全局队列中
type g struct {
stack stack //栈,两个能容纳任何变量地址的变量
stackguard0 uintptr // offset known to liblink
stackguard1 uintptr // offset known to liblink
_panic *_panic // innermost panic - offset known to liblink
_defer *_defer // innermost defer
m *m // current m; offset known to arm liblink
sched gobuf //存放g上下文信息,g被停止调度时,会将上线文信息存在这里,唤醒后可继续调度
syscallsp uintptr // if status==Gsyscall, syscallsp = sched.sp to use during gc
syscallpc uintptr // if status==Gsyscall, syscallpc = sched.pc to use during gc
stktopsp uintptr // expected sp at top of stack, to check in traceback
param unsafe.Pointer // passed parameter on wakeup
atomicstatus uint32
stackLock uint32 // sigprof/scang lock; TODO: fold in to atomicstatus
goid int64 //就像线程有id,g也有id
waitsince int64 // approx time when the g become blocked
waitreason string // if status==Gwaiting
schedlink guintptr //指向另一个G,全局G就是通过这个字段连在一起的
preempt bool // preemption signal, duplicates stackguard0 = stackpreempt
paniconfault bool // panic (instead of crash) on unexpected fault address
preemptscan bool // preempted g does scan for gc
gcscandone bool // g has scanned stack; protected by _Gscan bit in status
gcscanvalid bool // false at start of gc cycle, true if G has not run since last scan; TODO: remove?
throwsplit bool // must not split stack
raceignore int8 // ignore race detection events
sysblocktraced bool // StartTrace has emitted EvGoInSyscall about this goroutine
sysexitticks int64 // cputicks when syscall has returned (for tracing)
traceseq uint64 // trace event sequencer
tracelastp puintptr // last P emitted an event for this goroutine
lockedm *m
sig uint32
writebuf []byte
sigcode0 uintptr
sigcode1 uintptr
sigpc uintptr
gopc uintptr // pc of go statement that created this goroutine
startpc uintptr // 被执行的函数
racectx uintptr
waiting *sudog // sudog structures this g is waiting on (that have a valid elem ptr); in lock order
cgoCtxt []uintptr // cgo traceback context
labels unsafe.Pointer // profiler labels
timer *timer // cached timer for time.Sleep
gcAssistBytes int64
}
go func()到底做了什么?
对应函数runtime.newproc
1:从执行当前方法的G所在P的空闲G列表中取一个G,如果没有就从全局list中取一个,毕竟G还是经常使用,用完的G并不是马上释放,而是放回P的空闲列表中反复利用,如果还是没有空闲的G,就new一个malg(2048),G的栈大小为2K
2:如果有参数会将参数拷贝到G的栈上,将G状态改成可运行状态
3:如果P的G队列没满,将G加入队尾
4:如果P的G队列满了,就取出G队列的前面一半+当前G,共129个G加入全局队列
加入队列后,等待被调度
 
全局队列G存取
G本身有个字段schedlink指向另一个G,天生就是链表的一个节点,全局队列其实就是两个指针,一个指向队首,一个指向队尾,队尾的存在就是方便入队列
入全局队列:前面说过将P中的一半+1个G(129)加入全局队列,并不是一个个入队列,而是将这个129个G的首接入全局队列的尾,将全局队列的尾改成这129个G的尾
出全局队列:当系统开始调度的时候,会从P本地G队列取一个可用G执行,如果没有,则从全局队列中取,最多取128个,返回第一个用于执行,剩余的存入本地G队列中,毕竟操作本地队列不用加锁,操作全局队列需要加锁
 
findrunnable查找可执行的G
1:本地队列:从M对应的P的G队列中找(runqget),队列不为空,返回对列首个元素,对首指针指向下一个元素,当对首和对尾指向同一个元素时表示队列为空,访问本地队列中的G不需要加锁
2:全局队列:从全局队列中找(globrunqget),从全局队列中取G不是一次取一个,毕竟访问全局队列是要加锁的,所以全局队列有多少取多少,最多取P队列容量一半128个,将这些G存入P的G队列中
3:⽹络任务(netpoll)
4:从其他P任务队列取,拿一半
所有目的就是多核齐心协力以最快的速度完成任务,总不能出现某个P的本地队列还有多个人,其他P都在睡大觉吧,最后如果还是没找到一个可用的G,那就大家一起睡大觉,等着被叫醒
type p struct {
lock mutex
id int32
status uint32 // one of pidle/prunning/...
link puintptr
schedtick uint32 // incremented on every scheduler call
syscalltick uint32 // incremented on every system call
sysmontick sysmontick // last tick observed by sysmon
m muintptr // back-link to associated m (nil if idle)
mcache *mcache //方便小对象的分配,一个p一个,不需要加锁
racectx uintptr
deferpool [][]*_defer // pool of available defer structs of different sizes (see panic.go)
deferpoolbuf [][]*_defer
// Cache of goroutine ids, amortizes accesses to runtime·sched.goidgen.
goidcache uint64
goidcacheend uint64
// Queue of runnable goroutines. Accessed without lock.
runqhead uint32 //队头
runqtail uint32 //队尾
runq []guintptr //G循环队列
runnext guintptr //高优先级的G,会先执行
// Available G's (status == Gdead)
gfree *g //空闲G列表
gfreecnt int32 //空闲G数量
sudogcache []*sudog
sudogbuf []*sudog
tracebuf traceBufPtr
// traceSweep indicates the sweep events should be traced.
// This is used to defer the sweep start event until a span
// has actually been swept.
traceSweep bool
// traceSwept and traceReclaimed track the number of bytes
// swept and reclaimed by sweeping in the current sweep loop.
traceSwept, traceReclaimed uintptr
palloc persistentAlloc // per-P to avoid mutex
// Per-P GC state
gcAssistTime int64 // Nanoseconds in assistAlloc
gcBgMarkWorker guintptr
gcMarkWorkerMode gcMarkWorkerMode
gcw gcWork
runSafePointFn uint32 // if 1, run sched.safePointFn at next safe point
pad [sys.CacheLineSize]byte
}
 
永远不会退出的调度(schedule)
当一个G执行完成后,会继续调用调度函数schedule,死循环就产生了
// goexit continuation on g0.
func goexit0(gp *g) {
_g_ := getg()
casgstatus(gp, _Grunning, _Gdead)
dropg()
_g_.m.locked =
gfput(_g_.m.p.ptr(), gp)
schedule()
}
整体执行流程
mstart() => schedule() => findrunnable() => execute() => func() => goexit() => schedule()
M就绪  =>调度 => 查找可调度G => 执行G => 具体方法 => 执行完成 => 继续调度
入口函数是 _rt0_amd64_linux,需要说明的是,不同平台的入口函数名称会有所不同,该方法会调用runtime.rt0_go汇编。
rt0_go 做了大量的初始化工作,runtime.args 读取命令行参数、runtime.osinit 读取 CPU 数目,runtime.schedinit初始化Processor数目,最大的Machine数目等等。
 
除此之外,我们还看到了两个奇怪的 g0 和 m0 变量。m0 Machine 代表着当前初始化线程,而 g0 代表着初始化线程 m0 的 system stack,似乎还缺一个 p0 ?
实际上所有的 Processor 都会放到 allp 里。runtime.schedinit 会在调用 procresize 时为 m0 分配上 allp[0] 。所以到目前为止,初始化线程运行模式是符合上文提到的 G/P/M 模型的。
 
大量的初始化工作做完之后,会调用 runtime.newproc 为 mainPC 方法生成一个 Goroutine。 虽然 mainPC 并不是我们平时写的那个 main 函数,但是它会调用我们写的 main 函数,所以 main 函数是会以 Goroutine 的形式运行。
TEXT _rt0_amd64_linux(SB),NOSPLIT,$-
LEAQ (SP), SI // argv
MOVQ (SP), DI // argc
MOVQ $main(SB), AX
JMP AX TEXT main(SB),NOSPLIT,$-
MOVQ $runtime·rt0_go(SB), AX
JMP AX TEXT runtime·rt0_go(SB),NOSPLIT,$
LEAQ runtime·g0(SB), CX
MOVQ CX, g(BX)
LEAQ runtime·m0(SB), AX // save m->g0 = g0
MOVQ CX, m_g0(AX)
// save m0 to g0->m
MOVQ AX, g_m(CX)
CALL runtime·args(SB)
CALL runtime·osinit(SB) //获取cpu数量,页大小
CALL runtime·schedinit(SB) //调度初始化
// create a new goroutine to start program
MOVQ $runtime·mainPC(SB), AX // entry,执行runtime.main
CALL runtime·newproc(SB)
// start this M
CALL runtime·mstart(SB) MOVL $0xf1, 0xf1 // crash
RET DATA runtime·mainPC+(SB)/,$runtime·main(SB)
GLOBL runtime·mainPC(SB),RODATA,$ package runtime
// The main goroutine.
func main() {
// Allow newproc to start new Ms.
mainStarted = true
gcenable()
fn := main_init // make an indirect call, as the linker doesn't know the address of the main package when laying down the runtime
fn()
fn = main_main // make an indirect call, as the linker doesn't know the address of the main package when laying down the runtime
fn()
exit()
}
参考
https://github.com/golang/go    (go源码)
https://github.com/qyuhen/book  (雨痕,内容很棒很全面,已出书)