- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - phát hiện rò rỉ bộ nhớ Ruby/Ruby on Rails
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我正在研究 Golang 并遇到一个问题,我已经研究了几天,我似乎无法理解 go routines 的概念以及它们的使用方式。
基本上我是在尝试生成数百万条随机记录。我有生成随机数据的函数,并将创建一个包含此数据的巨大 .CSV 文件。
我的问题是是否有可能使这个并发并加快速度?
我的代码基本上是生成一个随机字符串,将字符串写入文件最多 N 次(其中 N 是您想要的任何值)。
我的问题是是否可以同时执行此操作以减少执行时间。似乎无论我如何处理这个问题,我仍然得到相同的基准,就好像我没有使用 go routines 一样。
这是我目前所拥有的示例:
func worker(c chan string) {
for {
c <- /* Generate random data using other functions here */
}
close(c)
}
func writer(s string) {
csvfile.WriteString(s)
}
hàm main(){
receive := make(chan string)
for i := 0; i < 100; i++ {
go worker(receive)
}
for i := 0; i < 10000; i++ {
go writer(<-receive)
}
}
在我生成数据的地方,我使用了大量的函数调用:https://github.com/Pallinder/go-randomdata .你认为这可能是我一直失败的地方吗?
如有任何帮助,我们将不胜感激。
câu trả lời hay nhất
我认为您不应该在这里尝试使用 go 例程。文件写入几乎总是原子的,你想使写入文件的机制并发......这将需要一个复杂的锁定机制,由于写入本身仍然是原子的,最终可能不会提高应用程序性能。
如果数据生成是您程序的瓶颈,那么在 go 例程中拆分该工作并从您获取所有数据的地方写入是有意义的。但是
for i := 0; i < 100; i++ {
go worker(receive)
}
for {
lựa chọn {
case item := <-receive:
writer(item)
case <-abort:
cleanUp()
trở lại
}
}
你不能在从一个 channel 接收并无休止地调用一个函数的同时循环一些 int ......你可以在一个选择中从一个 channel 接收。或者只是做 item := <-recieve
这会阻塞直到读取一个项目。在我上面的示例中,我提供了一些伪代码来演示更多您的设计在这种情况下应该是什么。你需要一个中止 channel ,这样你就可以在你想要停止应用程序时退出你的例程。它可能应该完成对文件的写入,然后在返回之前将其关闭。
关于Golang 和并发/并行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31250617/
Tôi đang cố gắng triển khai một số logic tích lũy trong môi trường đa luồng; Tôi tự hỏi liệu có cách nào tốt hơn/nhanh hơn để thực hiện việc này mà không cần khóa và từ khóa được đồng bộ hóa không? Đây là mã hiện tại của tôi: public class Concurr
Tôi cần trợ giúp xây dựng một màn hình triển khai semaphore, một ví dụ C đơn giản sẽ thực hiện được. Điều này chứng tỏ rằng màn hình có thể được sử dụng ở bất cứ nơi nào có thể sử dụng semaphore. Câu trả lời hay nhất Nếu bạn cho phép mutexes/condvars, hãy kiểm tra: #include
Tôi đã xây dựng một số ajax trả về một phần danh mục sản phẩm và tôi đang cố gắng xuất xml thành tài liệu, cho đến nay đây là những gì tôi có: $("#catalog").append("Item NamePriceDe
Xin lỗi nếu câu hỏi của tôi đã được hỏi trước đó hoặc nếu nó quá rõ ràng, nhưng tôi thực sự cần phải làm rõ điều này. Cảm ơn sự giúp đỡ của bạn. Trong giao diện nhiều người dùng, điều gì sẽ xảy ra nếu cùng một giao dịch từ những người dùng khác nhau đến máy chủ cùng một lúc? Tôi có bảng tiếp theo: tạo tab
Đây có thể là một câu hỏi ngu ngốc, nhưng liệu đầu ra của chương trình này (như hiện tại) có thể bằng 0 không? lớp công khai Test2{ int a = 0 AtomicInteger b = new Atomi
Giả sử một trang web trên localhost của tôi mất khoảng 3 giây để xử lý mỗi yêu cầu. Điều này hoạt động tốt, như mong đợi (vì nó đang thực hiện một số mạng lưới thú vị ở hậu trường). Tuy nhiên, nếu tôi mở cùng một url trong một tab (trong firefox) rồi thêm lại cả hai
Tôi hơi bối rối về khóa đọc của MongoDB. Một bộ sưu tập có thể hỗ trợ bao nhiêu thao tác đọc đồng thời? Câu trả lời hay nhất được viết trong liên kết do tk đưa ra: http://www.mongodb.org/pages/viewpage.acti
Điều gì xảy ra nếu có bốn ứng dụng CUDA đồng thời cạnh tranh tài nguyên trên GPU để chúng có thể chuyển công việc của mình sang card đồ họa? Hướng dẫn lập trình Cuda 3.1 đề cập rằng một số phương thức không đồng bộ: Kernel
Trong cuộc phỏng vấn gần đây nhất với Baidu, tôi đã gặp phải một vấn đề về tính đồng thời của spark. Hôm nay chúng ta sẽ cùng nhau giải quyết những vấn đề này. Hình ảnh hơi xấu, nhưng không sao, tôi đã đặt câu hỏi thực tập của Baidu. liên kết bên dưới: Liên kết: Thực tập kỹ sư phát triển dữ liệu lớn của Baidu năm 2022
Tôi có câu hỏi về chủ đề Groovy. Nhiệm vụ của tôi là bằng cách nào đó dịch mọi tệp trong một thư mục nhất định và đặt kết quả đầu ra vào các tệp trong các thư mục khác. Tôi đã viết đoạn mã sau và nó hoạt động: static def dịchDir(
Sự khác biệt giữa đồng bộ hóa và khóa trong Java là gì? Câu trả lời tốt nhất được đồng bộ hóa là từ khóa ngôn ngữ; khóa là một đối tượng. Khi một phương thức hoặc khối mã được đánh dấu là đã đồng bộ hóa, bạn đang nói rằng phương thức hoặc khối mã đó trước tiên phải thu được một số đối tượng khóa (có thể được chỉ định trong cú pháp đồng bộ hóa) trước khi nó có thể
Tôi cần tạo một máy chủ RPC đồng thời có thể xử lý nhiều yêu cầu từ máy khách cùng một lúc. Sử dụng trình biên dịch linux rpcgen (dựa trên sun RPC), tùy chọn -A để tạo sơ khai cho các máy chủ đồng thời không được hỗ trợ. (-Một tùy chọn được sử dụng trong so
System.out.println("Nhập số lượng những gì bạn muốn làm"); System.out.println("1 = Thủ công
Tôi đang chuyển ứng dụng của mình sang iOS 8.0 và nhận thấy rằng UIAlertView không được dùng nữa. Vì vậy, tôi đã thay đổi cách tiếp cận của mình sang sử dụng UIAlertController. Điều này hoạt động trong hầu hết các trường hợp. Ngoại trừ, khi ứng dụng của tôi truy cập
Tôi đang đọc hai tệp văn bản cùng lúc theo từng dòng. Điều tôi đặc biệt muốn làm là khi lineCount giống nhau trên mọi chuỗi, tôi muốn xem máy quét hiện đang đọc chuỗi nào. Tôi đã tìm xung quanh một số mẫu có thể thực hiện việc này, như So sánh và Hoán đổi
Tôi đang đọc Java Concurrency in Practice. Trong phần Chính sách ngắt, phần Hủy và tắt máy có đề cập rằng Một tác vụ không nên thừa nhận bất cứ điều gì về
Tôi đang cố gắng tìm hiểu những điều cơ bản về chủ đề, mutexes, v.v. Thực hiện theo các tài liệu và ví dụ ở đây. Trong đoạn mã dưới đây tôi nhận được kết quả mong đợi. Câu hỏi: Bạn muốn xác nhận xem tôi có bất kỳ cạm bẫy nào không? Làm cách nào chúng tôi có thể cải thiện mã bên dưới? Chuỗi của tôi cố gắng lấy mutex ở dòng nào hoặc đang chờ mutex
Đồng thời đề cập đến hai tác vụ chạy song song trên các luồng khác nhau. Tuy nhiên, các phương thức không đồng bộ chạy song song nhưng trên cùng một luồng. Làm thế nào điều này đạt được? Ngoài ra, còn sự song song thì sao? Sự khác biệt giữa ba khái niệm này là gì? Câu trả lời hay nhất Đồng thời và song song thực sự là những nguyên tắc giống như bạn đã phỏng đoán chính xác, cả hai
Lấy định nghĩa lớp ConcurrentDouble này làm ví dụ: public class ConcurrentDouble { public double num = 0;
Tôi đã lên kế hoạch sử dụng tính đồng thời trong các dự án của mình sau khi biết rằng tính đồng thời thực sự làm tăng thông lượng cho nhiều người. Bây giờ tôi chưa làm được gì nhiều với đa luồng hoặc đồng thời nên quyết định tìm hiểu và thực hiện một bằng chứng đơn giản về khái niệm trước khi sử dụng nó trong một dự án thực tế. Đây là hai ví dụ về những gì tôi đã thử: 1.
Tôi là một lập trình viên xuất sắc, rất giỏi!