Sobes.tech
Junior — Middle

Kuo skiriasi naudojant gijų baseiną ir kuriant naujas gijas tiesiogiai, kai to reikia?

sobes.tech AI

Atsakymas iš AI

Pagrindinis skirtumas tarp naudojimo siūlų baseino ir naujų siūlų kūrimo pagal poreikį:

  • Naujų siūlų kūrimas pagal poreikį — kiekvieną kartą kuriamas naujas siūlas, tai brangu laiko ir išteklių atžvilgiu, ypač kai yra daug užduočių.
  • Siūlų baseinas — iš anksto sukuriamas fiksuotas siūlų skaičius, kurie yra pakartotinai naudojami užduočių vykdymui. Tai sumažina išteklių sąnaudas, padidina našumą ir valdymo patogumą.

Pavyzdys C++ kalba naudojant siūlų baseiną (supaprastintas):

#include <thread>
#include <vector>
#include <queue>
#include <functional>
#include <condition_variable>
#include <mutex>
#include <atomic>

class ThreadPool {
    std::vector<std::thread> workers;
    std::queue<std::function<void()>> tasks;
    std::mutex queue_mutex;
    std::condition_variable condition;
    std::atomic<bool> stop;

public:
    ThreadPool(size_t threads) : stop(false) {
        for(size_t i = 0; i < threads; ++i) {
            workers.emplace_back([this] {
                while(true) {
                    std::function<void()> task;
                    {
                        std::unique_lock<std::mutex> lock(this->queue_mutex);
                        this->condition.wait(lock, [this]{ return this->stop || !this->tasks.empty(); });
                        if(this->stop && this->tasks.empty())
                            return;
                        task = std::move(this->tasks.front());
                        this->tasks.pop();
                    }
                    task();
                }
            });
        }
    }

    void enqueue(std::function<void()> task) {
        {
            std::unique_lock<std::mutex> lock(queue_mutex);
            tasks.push(std::move(task));
        }
        condition.notify_one();
    }

    ~ThreadPool() {
        stop = true;
        condition.notify_all();
        for(std::thread &worker : workers)
            worker.join();
    }
};

Taip, siūlų baseinas optimizuoja išteklių naudojimą ir didina daugiagijinės apdorojimo efektyvumą.