Có đảm bảo rằng GOMAXPROCS được đặt thành 1 khi biến môi trường cùng tên không được đặt không?Giá trị mặc định GOMAXPROCS là gì
Mã này cho thấy giá trị:
package main
import (
"runtime"
"fmt"
)
func getGOMAXPROCS() int {
return runtime.GOMAXPROCS(0)
}
func main() {
fmt.Printf("GOMAXPROCS is %d\n", getGOMAXPROCS())
}
và chạy nó như thế này:
$ GOMAXPROCS= go run max.go
GOMAXPROCS is 1
cho thấy rằng nó là 1 trong trường hợp này, nhưng tôi đang tìm kiếm một số xác nhận ở đây.
GOMAXPROCS không nên biến mất cho đến Go 2.0 sớm nhất, nếu không nó sẽ phá vỡ bảo đảm của Go 1: không có thay đổi nào về API sẽ phá vỡ hoặc thay đổi hành vi thư viện chuẩn trừ khi đó là sửa lỗi. Vì GOMAXPROCS hơi kỳ quặc và ảnh hưởng trực tiếp đến thời gian chạy nên nó có thể trở thành một gợi ý chứ không phải là một lệnh, nhưng nó sẽ không đột nhiên biến mất trên bạn trong Go 1.2 hoặc bất cứ thứ gì. – LinearZoetrope
@Jsor Nếu GOMAXPROCS là để thay đổi hành vi của một cái gì đó nó sẽ âm thanh như một lỗi cho tôi? – inf
@inf Nó sẽ không phải là một lỗi, bởi vì nó không ảnh hưởng đến ngữ nghĩa của ngôn ngữ (có nghĩa là, kết quả cuối cùng). Thời gian duy nhất nó có thể ảnh hưởng đến ngữ nghĩa là nếu bạn đang chơi với hành vi không xác định/bất hợp pháp như điều kiện chủng tộc để bắt đầu. Hãy nghĩ về GOMAXPROCS như chỉ thị 'inline' trong C++, trình biên dịch được phép bỏ qua nó bởi vì đôi khi nó biết tốt hơn bạn, nhưng nó cũng không ảnh hưởng đến kết quả cuối cùng trừ khi bạn đang làm những điều kỳ lạ. GOMAXPROCS là một chỉ thị thời gian chạy, nhưng áp dụng tương tự (mặc dù có những cân nhắc được thực hiện cho những thứ như OpenGL). – LinearZoetrope