Можно ли создать однопоточное приложение в старом стиле для Linux в Go?Linux

Ответить Пред. темаСлед. тема
Гость
 Можно ли создать однопоточное приложение в старом стиле для Linux в Go?

Сообщение Гость »

Мне интересно, есть ли способ создать приложение для консоли с петью в ходе? < /p>
Конечно, я полностью понимаю Можно создать такое приложение в C/Rust/Zig/& C), но я просто изучаю способности языка GO и его современных компиляторов. () , но, кажется, не влияет на общее количество потоков со значениями ниже, чем текущее количество процессоров (или я просто делаю это неправильно).
В основном , Я хотел поиграть с созданием какого-то консольного приложения в старом стиле для Linux без какого-либо параллелизма и goroutines, просто бесконечное для цикл, который периодически выполняет некоторые вещи (возможно, чтение некоторых файлов в путем блокировки ввода/вывода и отображать некоторую информацию от них), где я иногда звоню коллекционеру мусора вручную, если мне нужно. >, debug.setmemorylimit и runtime.gc () . Но как я могу создать однопоточную? Или это невозможно по сути? >

Код: Выделить всё

package main

import (
"runtime"
"runtime/debug"
"strings"
"time"
)

func init() {
// Locking OS thread
runtime.LockOSThread()
// GOMAXPROCS=1, Any effect?
runtime.GOMAXPROCS(1)
// Turn off garbage collection
debug.SetGCPercent(-1)
//debug.SetMemoryLimit(math.MaxInt64)
}

func main() {
var index uint64
for {
index++

// Emulate some memory allocation
strings.Repeat("x", 10*1024)

// Get memory statistics
var memStats runtime.MemStats
runtime.ReadMemStats(&memStats)

// Output some info
println(index, memStats.Alloc/1024.0, memStats.Sys/1024.0, memStats.NumGC)

if index%20 == 0 {
// Run GC periodically
runtime.GC()
}
time.Sleep(time.Duration(500) * time.Millisecond)
}
}
< /code>
build for linux: < /p>
GOARCH=amd64 GOOS=linux go build -ldflags "-s -w" -trimpath .
Несмотря на то, что я не использую goroutines и устанавливаю Gomaxprocs на 1, у меня есть несколько потоков в ОС (в данном случае Debian/Ubuntu). Вот htop output:
< /p>
Я осознаю резервы времени выполнения, по крайней мере, один поток для приложения, один для коллекционера мусора и еще пара на всякий случай. Вопрос в том, является ли это поведение обязательным, или оно может как -то отключить? (Допустим, я хочу застрелить себя в ногу и сами справиться со всеми проблемами памяти и блокировки ввода-вывода.)

Подробнее здесь: https://stackoverflow.com/questions/794 ... linux-in-g
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Linux»