hôm trước mình đọc lại hiểu là một container chỉ cho tối đa 2 network (user-define ) được connect vào, nên mới thắc mắc.
Nay đọc lại thì thấy có vẻ không rõ nghĩa lắm =))
Vì em cho hết nó vào trong 1 scope nên các task trong cái scope đó vẫn chạy theo thứ tự. Thứ tự chạy task trong scope không có 1 tí gì liên quan tới THỜI GIAN thực thi task, mà chỉ liên quan tới THỨ TỰ KHAI BÁO task.
1 bắt đầu -> 1 kết thúc -> 2 bắt đầu -> ...đợi rất lâu nhưng 3 vẫn không được phép start ... -> 2 kết thúc -> 3 bắt đầu-> 3 kết thúc
Do vậy kết quả sẽ không in theo cái mong muốn của em là 1-1 1-3 1-2 mà vẫn in theo thứ tự FIFO là 1-1 1-2 1-3
Để các task chạy đồng thời, em phải tách nó ra các queue khác nhau như ví dụ này
Em có thể thêm đoạn print start - end ở performWork để check log.
DispatchQueue.global(qos: .userInitiated).async {[unowned self] in
print("1-1") // task 1
print("1-3") // task 3
}
DispatchQueue.global(qos: .userInitiated).async {[unowned self] in
self.performWork() // task 2
}
func performWork() {
print("1-2 start")
let n = 5000
var matrix = Array(repeating: [Int](repeating: 0, count: n), count: n)
for i in 0..<n {
for j in 0..<n {
matrix[i][j] = i + j
}
}
print("1-2 finish")
}
Tuy nhiên ví dụ này cũng KHÔNG đảm bảo việc LUÔN LUÔN in ra
Em hiểu ý anh nói là trong concurrent queue giả sử có 3 tasks là task 1, task 2, task 3 thì task 1 chay trước rồi đến task2 rồi đến task 3 nhưng 3 task này vẫn chạy đồng thời. Ví dụ:
func performWork() {
let n = 5000
var matrix = Array(repeating: [Int](repeating: 0, count: n), count: n)
for i in 0..<n {
for j in 0..<n {
matrix[i][j] = i + j
}
}
print("1-2")
}
thì thực tế nó sẽ in ra kết quả:
1-1
1-2
1-3
nhưng nếu task2 làm công việc nặng thì theo lý mà nó phải in ra thế này mới đúng chứ anh:
1-1
1-3
1-2
Các concurrency queue sẽ chạy đồng thời, nhưng các work items (tức là các câu lệnh trong cái scope {} của nó sẽ chạy lần lượt, theo thứ tự FIFO
Tài liệu Apple có viết rõ đây em nhé
A dispatch queue can be either serial, so that work items are executed one at a time, or it can be concurrent, so that work items are dequeued in order, but run all at once and can finish in any order. Both serial and concurrent queues process work items in first in, first-out (FIFO) order.
Em có thể tự tạo cho mình 1 chương trình đơn giản để dễ hiểu hơn. Ví dụ đoạn code
@devil_boom_129 Đổi PATCH thành PUT có thể giải quyết được vấn đề với 1 controller, tuy nhiên đó không phải là cách giải quyết bản chất của vấn đề em ạ
Em nên đổi URL thì hơn.
Ví dụ như việc update thông tin về trận đấu thì có thể là /matches/{id}, còn update về score thì có thể là /matches/{id}/score chẳng hạn
hàng đợi DispatchQueue.global là một concurrency queue thì theo em hiểu là các công việc(tasks) sẽ chạy gần như đồng thời nên em hiểu là 3.1 và 4.1 ở 2 hàng đợi sẽ chạy gần như đồng thời .Nếu như anh nói là 3.1 chạy xong rồi mới đến 4.1 vậy thì hàng đợi DispatchQueue.global thể hiện tính concurrency queue ở chỗ nào anh . Mong anh trả lời giúp e ạ?
@duongricky Về cơ bản là sau khi gọi 2 hàm này thì kết quả 2 hàm này là giống nhau.
Nhưng Lang::setLocale là set default locale còn App::setLocale là set current application locale.
Bản chất hàm setLocale gọi từ App cũng sẽ gọi tới setLocale trong Lang, và làm thêm một số việc như change config['app.locale'] và gọi tới event update locale.
THẢO LUẬN
mình cũng đang cần cái này. Like!
console.log (người); // Bryantyou can edit it.hóng những bài viết tiếp theo của bạn, rất chi tiết (Y)
Bài viết hay mà ít người quan tâm Thank thớt nhé
good
hôm trước mình đọc lại hiểu là một container chỉ cho tối đa 2 network (user-define ) được connect vào, nên mới thắc mắc. Nay đọc lại thì thấy có vẻ không rõ nghĩa lắm =))
Vì em cho hết nó vào trong 1 scope nên các task trong cái scope đó vẫn chạy theo thứ tự. Thứ tự chạy task trong scope không có 1 tí gì liên quan tới THỜI GIAN thực thi task, mà chỉ liên quan tới THỨ TỰ KHAI BÁO task.
Do vậy kết quả sẽ không in theo cái mong muốn của em là
1-1 1-3 1-2mà vẫn in theo thứ tự FIFO là1-1 1-2 1-3Để các task chạy đồng thời, em phải tách nó ra các queue khác nhau như ví dụ này Em có thể thêm đoạn
print start - endởperformWorkđể check log.Tuy nhiên ví dụ này cũng KHÔNG đảm bảo việc LUÔN LUÔN in ra
mà nó sẽ có 2 kết quả
hoặc
đoạn ở trong
catchkìa emEm hiểu ý anh nói là trong concurrent queue giả sử có 3 tasks là task 1, task 2, task 3 thì task 1 chay trước rồi đến task2 rồi đến task 3 nhưng 3 task này vẫn chạy đồng thời. Ví dụ:
DispatchQueue.global(qos: .userInitiated).async {[unowned self] in print("1-1") // task 1 self.performWork() // task 2 print("1-3") // task 3 }
func performWork() { let n = 5000 var matrix = Array(repeating: [Int](repeating: 0, count: n), count: n) for i in 0..<n { for j in 0..<n { matrix[i][j] = i + j } } print("1-2") }
thì thực tế nó sẽ in ra kết quả: 1-1 1-2 1-3
nhưng nếu task2 làm công việc nặng thì theo lý mà nó phải in ra thế này mới đúng chứ anh: 1-1 1-3 1-2
Các concurrency queue sẽ chạy đồng thời, nhưng các
work items(tức là các câu lệnh trong cái scope {} của nó sẽ chạy lần lượt, theo thứ tự FIFOTài liệu Apple có viết rõ đây em nhé
Em có thể tự tạo cho mình 1 chương trình đơn giản để dễ hiểu hơn. Ví dụ đoạn code
có thể in ra
nhưng không thể in ra
vì 1-2 theo thứ tự phải luôn chạy sau 1-1
em tìm không ra anh ơi
cám ơn anh ạ.
@tuanhavan Ah, em có thể cài thêm package gulp của npm để tự động generate js và css ra nhé.
Tham khảo tại link này nhé. https://viblo.asia/p/laravel-5-elixir-ZWApGxZOR06y
Bài viết rất hữu ích, thank anh
ùi biến hóa hay quá cũng hơi khó hiểu, để đó tối e về đọc , tks anh
Hóng phần 2... Thank you
@devil_boom_129 Đổi
PATCHthànhPUTcó thể giải quyết được vấn đề với 1 controller, tuy nhiên đó không phải là cách giải quyết bản chất của vấn đề em ạEm nên đổi URL thì hơn.
Ví dụ như việc update thông tin về trận đấu thì có thể là
/matches/{id}, còn update vềscorethì có thể là/matches/{id}/scorechẳng hạnvậy giờ em chỉ để 1 cái
PATCHđể update thông tin trận đấu, còn chuyển hết ghi tỉ số và public trận đấu thànhPUTlà được đúng không ạ?hàng đợi DispatchQueue.global là một concurrency queue thì theo em hiểu là các công việc(tasks) sẽ chạy gần như đồng thời nên em hiểu là 3.1 và 4.1 ở 2 hàng đợi sẽ chạy gần như đồng thời .Nếu như anh nói là 3.1 chạy xong rồi mới đến 4.1 vậy thì hàng đợi DispatchQueue.global thể hiện tính concurrency queue ở chỗ nào anh . Mong anh trả lời giúp e ạ?
@duongricky Về cơ bản là sau khi gọi 2 hàm này thì kết quả 2 hàm này là giống nhau. Nhưng Lang::setLocale là
set default localecòn App::setLocale làset current application locale. Bản chất hàm setLocale gọi từ App cũng sẽ gọi tới setLocale trong Lang, và làm thêm một số việc như change config['app.locale'] và gọi tới event update locale.setLocale gọi từ App.
setLocale gọi từ Lang
Chi tiết hơn bạn vào 2 files sau để tìm hiểu rõ hơn nha.
\Illuminate\Translation\Translator.php\Illuminate\Foundation\Application.php