Я вижу, что это старый пост, но я нашел его полезным и подумал, что поделился бы решением, аналогичным тому, что предложил @kzqai:
У меня есть функция, которая получает два параметра, такие как ...
function getTableInfo($inTableName, $inColumnName) {
....
}
Внутри я проверяю массивы, которые я установил, чтобы убедиться, что доступны только таблицы и столбцы с «блаженными» таблицами:
$allowed_tables_array = array('tblTheTable');
$allowed_columns_array['tblTheTable'] = array('the_col_to_check');
Затем проверка PHP перед работающий PDO выглядит как ...
if(in_array($inTableName, $allowed_tables_array) && in_array($inColumnName,$allowed_columns_array[$inTableName]))
{
$sql = "SELECT $inColumnName AS columnInfo
FROM $inTableName";
$stmt = $pdo->prepare($sql);
$stmt->execute();
$result = $stmt->fetchAll(PDO::FETCH_ASSOC);
}
Вы могли также:
Выезд Поточная обработка в C#, Joseph Albahari, очень полной ссылкой о многопоточности. В частности, он покрывает очереди производителя/потребителя .
Можно попробовать это решение. Это показывает Вам, как реализовать шаблон производителя-потребителя. Имеет также некоторое объяснение на том, что может быть сделано с ним. Как различные комбинации числа производителей и потребителей.
Это - интересная статья о ThreadPools:
Для более простых вариантов использования Вы могли также использовать собственный класс ThreadPool.Net.
Одно из моих любимых решений этой проблемы подобно producer/consumer
шаблон.
я создаю основной поток (в значительной степени моя программа Main()
), который содержит блокирующийся объект очереди.
Этот основной поток отделяет несколько рабочих потоков, какие простые поп-вещи от центрального блокирования распараллеливают и обрабатывают их. Так как это - ориентированная на многопотоковое исполнение очередь блокирования, биты синхронизации легки - эти TaskQueue.Dequeue()
, вызов заблокируется, пока задача не ставится в очередь потоком производителя / основным потоком.
можно динамично управлять числом рабочих, Вы хотите или фиксируете его согласно переменной конфигурации - так как они все просто выталкивают вещи от очереди, число рабочих не добавляет сложности.
В моем случае, у меня есть сервис, который обрабатывает несколько различных типов tasks
. Мне ввели очередь для обработки чего-то универсального как TaskQueueTask
. Тогда я разделяю это на подклассы и переопределяю Execute()
метод.
я также попробовал подход пула потоков.NET, где в Вас может бросить вещи в пул очень легко. Это чрезвычайно было просто в использовании, но также и обеспечило мало управления и никакую гарантию порядка выполнения, синхронизации, и т.д. Это рекомендовало только для легких задач.