Advertisement
Guest User

Untitled

a guest
Jul 28th, 2016
61
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.72 KB | None | 0 0
  1. ##Concurrency(Paralellik)
  2.  
  3. >Buyuk programmalar ko'pincha kichik programmalar yoradmi bilan quriladi Misol, Web server browser qilgan so'roqlarni(talablarni) dastlab, Browserga HTML sahifalarini qaytaradi(yuboradi), Va browserdan kelayotgan so'roq kichiq programma orqali eplanadi(uddalanadi).
  4.  
  5. ------
  6.  
  7. >Birdan ko'p so'roqlarni eplash uchun o'zining kichik kod parchalarini yurgizish buyuk programmalar uchun bu ajoyib, Taraqqiyotni birdan ko'p
  8. vazifalarni bir vaqtning o'zida yurgizishi uchun. Va bu "Concurrency" deyiladi (Paralellik). Va Go dasturlash tili uni juda ham qo'llab quvvatlaydi. Concurrency(paralellik) qullanish uchun Go'da goroutine(go muntazami) va channel(kanal) ishlatiladi.
  9.  
  10.  
  11. ###Goroutines(Go muntazamlar)
  12.  
  13. >Goroutine bu funksiya, Va boshqa funksiyalar bilan paralellik darajada yurishiga qobiliyati bor. Groutine yaratish uchun biz saqlangan so'z go qullanamiz va undan keyin funksiya yoqilishi. Quyidagidek:
  14.  
  15.  
  16. ```go
  17. package main
  18.  
  19. import "fmt"
  20.  
  21. func f(n int) {
  22. for i := 0; i < 10; i++ {
  23. fmt.Println(n, ":", i)
  24. }
  25. }
  26.  
  27. func main() {
  28. go f(0)
  29. var input string
  30. fmt.Scanln(&input)
  31. }
  32. ```
  33. >Yuqoridagi programmada ikkita go routine ishlatiliyapti. Birinchi goroutine u shubhasiz(ne yavniy) va u bizning main funksiyamiz.
  34. Va ikkinchi goroutine u, Biz f(0) funksiyasini yurgazganimizda yaratiladi. Odatda funksiya chaqirilganda programma funksiyadagi hamma stasdiqlovchilarni yurigzadi va funksiya chaqirilayotgan chiziqdan(qatordan) pastgi chiziqqa(qatorga) qaytadi. Goroutine bilan esa darhol navbatdagi chiziqqa qaytadi, Va funksiya o'z yurgizmasini tugatishini kutmaydi. Shuning uchun "Scanln" funksiyasi kiritilgan(yozilgan) edi, Uning siz programma sonlarni yozishga ulgurmay, yurishni qo'xtatib chiqardi.
  35.  
  36. ----
  37.  
  38. >Goroutinelar ular juda ham yengil va biz ulardan mingtalab yaratsak bo'ladi. 10'ta goroutine yurgizish uchun biz yuqoridagi programmani quyidagidek o'zgartirsak bo'ladi.
  39.  
  40. ```go
  41. func main() {
  42. for i := 0; i < 10; i++ {
  43. go f(i)
  44. }
  45. var input string
  46. fmt.Scanln(&input)
  47. }
  48. ```
  49. >Etibor qilgandirsiz, programmani yurgizganda huddi goroutinlar tartdibda yurgizilayotgandek, ammo ular bir faqtda yurishi lozim. Qani time.Sleep va rand.Intn funksiyasini qullanib bir oz ko'p kod qo'shaylik.
  50.  
  51. ```go
  52. package main
  53.  
  54. import (
  55. "fmt"
  56. "math/rand"
  57. "time"
  58. )
  59.  
  60. func f(n int) {
  61. for i := 0; i < 10; i++ {
  62. fmt.Println(n, ":", i)
  63. amt := time.Duration(rand.Intn(250))
  64. time.Sleep(time.Millisecond * amt)
  65. }
  66. }
  67. func main() {
  68. for i := 0; i < 10; i++ {
  69. go f(i)
  70. }
  71. var input string
  72. fmt.Scanln(&input)
  73. }
  74.  
  75. /*
  76. 4 : 0
  77. 6 : 0
  78. 5 : 0
  79. 7 : 0
  80. 0 : 0
  81. 8 : 0
  82. 2 : 0
  83. 3 : 0
  84. 1 : 0
  85. 9 : 0
  86. 3 : 1
  87. 9 : 1
  88. 7 : 1
  89. 9 : 2
  90. 8 : 1
  91. 0 : 1
  92. 4 : 1
  93. 5 : 1
  94. */
  95. ```
  96. >f() funksiyasi 0'dan 10'gacha sonlarni yuzib chiqaradi, Va yoziyotgan faqt har bir chaqiruvda kutib turadi 0 va 250ms(milli sekund)gacha.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement