THẢO LUẬN

Avatar
đã bình luận câu trả lời trong câu hỏi
thg 8 11, 2020 8:24 SA

@@! quen rồi anh. vì em đã đi làm, nay chuyển sang mảng android 😄 trước có pv vài lần nhưng toàn tạch, nên giờ lên xin thêm các câu hỏi 😄

0
thg 8 11, 2020 8:08 SA

😮

0

Bạn có thể tham khảo ở link này nhé https://docs.docker.com/compose/compose-file/#logging

0
thg 8 11, 2020 7:43 SA

Đức ơi tớ là fan hâm mộ của cậu =)))

0

trước đây e chuyên xài UIKIT luôn ạ, nhiều cái thấy nó hay hơn BS, e chuyển qua BS vì nghe nói sắp tới nó nghỉ chơi vs JQuery :v

0

Sorry bạn, do bài này mình chỉ dùng Channel default, tới bài sau mình mới giới thiệu về Channel buffered.

0

Tuyệt vời bạn, đúng ra chỗ này chỉ có 2 người vì chỉ có 2 coroutine send và receive. 1 người phát vé trên tay đang giữ 5 chiếc vé còn người kia muốn nhận 10 vé. Mình dùng từ để ví dụ quá sai, để mình sửa lại chỗ này. Cảm ơn bạn nhiều nhé 😄

0

Cám ơn bạn đã quan tâm nhé. Hi vọng những bài viết của mình ít nhiều giúp ích được cho bạn 😊

0

Đúng rồi bạn. Tuy nhiên, khi bạn sử dụng thành thạo Bootstrap, bạn cũng có thể define cho mình đc nhiều thứ mà k cần sử dụng Bootstrap. Tới khi ấy, biết đâu bạn sẽ tự build cho mình đc 1 bộ framework mới thì sao 😄 Ngoài bootstrap, bạn có thể tham khảo thêm UIKit. Đây là 1 framework css khá là hay. Sau này có thời gian có thể mình sẽ giới thiệu về UIKit tới mọi người.

0

viết chán quá bạn. Bạn không dành thời gian tìm hiểu để viết bài đúng không

0

hiện tại e sử dụng rất nhiều tiện ích lên quan của BS vì vậy e nghĩ chắc chưa thể bỏ nó đc ạ 😅

0
Avatar
đã bình luận câu trả lời trong câu hỏi
thg 8 11, 2020 3:58 SA

Đúng chuẩn ý luôn, cảm ơn bạn.

+1
thg 8 11, 2020 3:57 SA

ngóng phần 2 ✌️

0

Tuyệt vời quá anh Minh 😄

+1

Tiếp tục với ví dụ 5 vé và 10 người nhận vé của bạn. Với gói nhìn của mình, bạn đặt tiêu đề như vậy là chưa hợp lý. Vì fun main() = runBlocking { // COROUTINE NÀY MÌNH ĐẶT TÊN LÀ "run blocking cô rơ tin" val channel = Channel<Int>() val job = launch { for (x in 1..5) { channel.send(x * x) } }

for (x in 1..10) {
    println("Coroutine is completed?: ${job.isCompleted} / Coroutine is active?: ${job.isActive}")
    println(channel.receive())
}
println("Done! Run blocking coroutine is active?: $isActive")

} Theo đoạn code của bạn, ở đây cũng chỉ duy nhất một producer tức là coroutine con bạn tạo trong coroutine root chạy song song với coroutine root đảm nhận việc in vé. Quan trọng hơn, theo mình cũng chỉ có 1 người nhận vé, hay nói đúng hơn là 1 người nhận vé 10 lần chứ không phải là 10 người nhận vé, bởi vì chỉ có 1 consumer duy nhất trên coroutine root. Nếu bạn muốn ví dụ cho trường hợp 10 người nhận vé, mình nghĩ hãy sinh ra 10 coroutine con chạy song song hoặc tuần tự tuỳ bạn so với coroutine đóng vai trò producer in vé. Một coroutine con đóng vai trò như 1 người thực sự. Về mặt giải thích, có thể chập nhận lời giải thích của bạn, ở vé thứ 6 producer không in vé nữa nhưng consumer vẫn đang muốn lấy vé nên nó sẽ treo cho đến khi producer in thêm vé, trường hợp này là treo vĩnh viễn.

+1

Sau khi đọc bài của bạn tới mục Channels vs Flow (Hot & Cold), về cái ví dụ in 5 vé nhận 3 vé của bạn, mình có ý kiến riêng như sau: Đoạn code trong hàm main của bạn ở coroutine root, tức ở đây là runBlocking bạn tạo ra 1 coroutine con đóng vai trò như producer đẩy giá trị vào channel, coroutine này chạy song song với coroutine root bây giờ đang đóng vai trò như consumer. Bạn nói output của bạn là coroutine bị suspend forever, điều này đúng với bối cảnh của bạn tạo ra, tuy nhiên đây không hẳn là hạn chế của channel. Mình xin giải thích như sau:

  • Bạn khởi tạo một Channel<Int> với capacity mặc định là RENDEZVOUS, hiểu đại khái là chuyền tay trực tiếp từ producer tới consumer, không có bộ đêm buffer nên trong bối cảnh ví dụ của bạn, producer gửi 5 và consumer chỉ nhận 3, hay nói chính xác là producer gửi 3, consumer nhận 3. Vì sau đó consumer không nhận nữa nên producer sẽ bị suspend khi cố gắng gửi giá trị thứ 4, điều này làm cho coroutine root bị treo. Hãy thử tạo một Channel<Int> với capacity có sẵn là BUFFERED (mặc định 64), khi này producer được phép đẩy vào channel 5 giá trị (5< capacity của channel), consumer lấy ra 3 giá trị thì trong channel vẫn còn lại 2 giá trị. Tuy nhiên cả producer và consumer đều không bị treo nên lúc này coroutine root sẽ không bị treo.
+1
thg 8 11, 2020 3:00 SA

temp1.png

khi assign otherInHoa = inHoa thì chỉ assign reference thôi mà, sao 2 hàm lại khác nhau được ??

0

phần log rotate có thể config trong docker-compose file ko bác nhỉ ? hay phải config trong cấu hình của docker như trên mới được?

0

Mình thực sự khá ngại phát triển/fix bug trên môi trường Windows và mình cũng khuyên bạn nên chuyển sang làm việc trên môi trường Ubuntu càng sớm càng tốt nhé.

Hoặc một lựa chọn khác bạn có thể sử dụng môi trường Colab với support GPU sẵn rồi, như bài đã đề cập, full source code mình đã để ở trên Colab, bạn có thể chạy thử luôn https://colab.research.google.com/drive/1dd_fGnbagyYw08w-My0QCw7jbi0-EICH?usp=sharing

0
Avatar
đã bình luận câu trả lời trong câu hỏi
thg 8 11, 2020 2:11 SA

ừ, cách của ban phải lấy dữ liệu ra rồi mới so sánh sau đó mới xóa , nên mình mới bảo là khó viết truy vấn sql mà.

0
Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí