Ankündigung

Einklappen
Keine Ankündigung bisher.

Cronjobs, Threads, Workerthreads, mutex, undsoweiter

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Cronjobs, Threads, Workerthreads, mutex, undsoweiter

    heyho,

    diesmal ne relativ einfache und kurze Frage, und das wichtigste auch mal wieder ein auf PHP zugeschnittene Frage^^

    ich möchte nicht lange um den heissen Brei reden, es geht um folgendes:


    ich habe eigentlich 3 verschiedene Use-Cases:

    1) geplanter Task, auf die Sekunde genau
    2) Task, der sofort ausgeführt werden soll, aber nicht vom selben PHP Programm (also ein art detached thread)
    3) sich in einem Intervall wiederholende Aufgaben, das Intervall soll aber dynamsich angepasst werden können


    Das ganze soll aus zwei verschiedenen Sichtweisen gesehen werden:

    1s) Server mit wenig bis sehr wenig Useraufkommen/wenig last
    2s) Server mit viel Useraufkommen/las; Distributed Programming


    So Dinge wie reddis, beanstalkd und so dinge kenne ich....



    Wie würdet ihr das ganze realisieren?



    ein paar gedankengänge, überlegungen von mir:

    Bei wenig useraufkommen würde ich bei 2) einfach ein exec eines weiteren php-scriptes machen.
    Bei viel useraufkommen eben etwas ähnliches was man bei Threadpgrogramming eben auch macht, ..... ich hab ein paar Workerthreads/workerphp-scripte im hintergrund laufen, die sich arbeitspakte holen


    ähnliches gilt eigentlich für 1):

    wobei ich das ne art gameLoop/Main-Loop mit reinmachen würde.... Heisst mehre syscalls mit sleep bis zum ungefähren zeitpunkt der ausführung, in der nähe ein while(true) ohne sleeps mehr
    nähe bedeutet wirklich 1-2sec abstand bis zur ausführung
    Dann bekomme ich mit dem while(true) eine millisekunden genaue ausführung hin
    -> Ausführung dann aber auch wieder in exec externes php-script auslagern


    was mache ich wenn ich bei 3) cronjobs nicht auf minuten legen möchte?
    was möchte ich wenn ich das cronjobintervall dynamisch anpassen möchte, und nicht unbedingt aus php in meinen cronjobs rumschreiben möchte......



    allgemein:

    lang laufende PHP-Scripte finde ich unschön,
    jede stunde abschiessen und über systemd neustarten lassen?


    was mach ich um klassischse Wettlaufsituationen zu vermeiden, Overlapping von Task-Executions, CronJob-Executions
    -> klassische Lockfiles?, wirklich?


    oft startende php-scripte finde ich auch unschön, ein programm zu starten ist sehr teuer-> das spricht eigentlich dann auch gegen exec weiteres php-script

    sollte ich lieber ein Java/C++/C Programm im hintergrund werkeln lassen, das das ganze regelt und kein langlaufendes PHP-Script?
    (das problem des exec von den Task-PHP-Scripten besteht hier aber weiterhin, wenn ich keine langlebigen php-worker-threads laufen lasse)


    habe jetzt nur ein paar dinge, eventualitäten zusammengetragen, sicherlich einiges vergessen......, aber.....



    ...wie würdet ihr 1,2,3) mit beachtung von 1s) und 2s) realisieren
    wie würdet ihr das ganze schützen, gegen overlapping, absturz, und so dingen halt



    lg knotenpunkt









  • #2
    Hallo,

    besser wäre das in Java oder C#, ja. Weil da hast Du auch so Sachen wie synchronized, Monitor, einen Thread fest auf einen Core zuweisen (ich wüsste nicht wie das in pthreads geht). Synchronized oder ähnliches gibts denke ich in PHP auch nicht. Dort schlägt man sich noch mit den Mutex (jeder lässt den anderen den Vortritt. Klappt bei zwei aber nicht bei mehr Threads) Problem aus den 90ern herum...

    Zu dem Punkt ein PHP Skript Aufruf ist teuer: Du kannst auch redis verwenden, der cacht php variablen im arbeitsspeicher, sodass sie beim nächsten Skript Aufruf wieder verwendet werden können. Also quasi geteilte Ressourcen für PHP.

    Normalerweise bin ich ein Verfechter von Threads und würde Dir nicht zu RabbitMQ raten, in Deinem Fall ist es aber denke ich besser, weil Du da schon viele Konzepte umgesetzt hast. Dort kannst Du Exchange Queues festlegen, die auch denke ich nach einer gewissen Zeit ausgeführt werden können, etc.. Oder Vielleicht RabbitMQ in Verbindung mit Reactive Programming (rxphp)? Da kann man recht schön Zeitgesteuerte Events abfeuern zusammen mit dem Observable Pattern und anderen schönen Dingen. Wie man das in bestehende Frameworks integrieren kann, zeigt Angular 2 (rxjs) ganz schön.

    Ansonsten kannst Du Dir mal appserver.io anschauen, einen Webserver der komplett in PHP umgesetzt worden ist. Dort solltest Du auch einige lauffähige Beispiele zum Thema pthreads finden. Die offizielle Extension Doku ist doch recht mager...


    MFG

    derwunner

    Kommentar

    Lädt...
    X