package main
import (
"fmt"
"sync"
"time"
)
const (
jobsNum = 5
workersNum = 2
)
type Job struct {
id int
}
func worker(id int, jobChan <-chan Job, wg *sync.WaitGroup) {
for job := range jobChan {
process(id, job, wg)
}
}
func process(id int, job Job, wg *sync.WaitGroup) {
defer wg.Done()
fmt.Printf("Worker %d, Job start: %d\n", id, job.id)
time.Sleep(1 * time.Second)
fmt.Printf("Worker %d, Job end: %d\n", id, job.id)
}
func main() {
fmt.Println("Start")
jobChan := make(chan Job, 10)
var wg sync.WaitGroup
wg.Add(jobsNum)
// start the workers
for i := 0; i < workersNum; i++ {
go worker(i, jobChan, &wg)
}
// enqueue jobs
for i := 0; i < jobsNum; i++ {
jobChan <- Job{
id: i,
}
}
close(jobChan)
wg.Wait()
fmt.Println("Done")
}
Start
Worker 1, Job start: 1
Worker 0, Job start: 0
Worker 0, Job end: 0
Worker 0, Job start: 2
Worker 1, Job end: 1
Worker 1, Job start: 3
Worker 0, Job end: 2
Worker 0, Job start: 4
Worker 1, Job end: 3
Worker 0, Job end: 4
Done
Первое, что в голову пришло - перелить это все в несколько разных JSON-файлов по разделам.Работать с набором JSON файлов не практично. Стоит работать с СУБД.
Следом пришла мысль завести базу на SQLite со всеми нормами, и уже ее разворачивать при запуске приложения.А это уже хороший выбор. Советую начать с неё.
Какой наилучший вариант для хранения справочника и быстрого парсинга оного для подгрузки в приложение?Все справочники подгружать сразу при инициализации программы не нужно. Некоторые особо критичные данные можно подгрузить в начале, но только если они не занимают сотню МБ в памяти.
Пользователь должен периодически заходить на /api/result и видеть статусы по картинкам (в процессе\готово)
Звук отмычки.относительно лёгкая задача из-за специфического звука.
Вопрос: существует ли какая-нибудь утилита, которая будет писать лог типа:Зачем утилита, если сама программа может писать в журнал?
Сам автор программы задачу не осилил, поэтому сбросил её на меня :)А сам не можешь найти места, которые обращаются к СУБД и прочим ресурсам, и, в добавок, создают процессы? Найдя их, пиши в журнал.
Могу ли я теперь найти все записи пользователя по маске например refresh:userId * ?в случае автоматического истечения проверять старые не придётся.
This bug check is usually caused by a video driver behaving improperly.