Немного покумекал с помощью доки ORM-а и совета разложить по отдельности такой результат
db
.Where(
db
.Table("fruit_similars")
.Select("distinct(fruit_similar_id)")
.Where(
"fruit_id IN (?)",
db
.Table("fruit_rateds")
.Select("fruit_id")
.Where("user_id = ?", USER_ID)
.SubQuery()
)
.NOT(
"fruit_similar_id IN (?)",
db
.Table("fruit_rateds")
.Select("fruit_id")
.Where("user_id = ?", USER_ID)
.SubQuery()
)
.SubQuery()
)
.Find(&films)
в надежде получить это:
SELECT DISTINCT fruit_similar_id
FROM fruit_similars
WHERE fruit_id IN
(
SELECT fruit_id
FROM fruit_rated
WHERE user_id = `1`
)
AND fruit_similar_id NOT IN
(
SELECT fruit_id
FROM fruit_rated
WHERE user_id = `1`
)
doublench21, согласен, сказано очень размыто. Вы случайно не знаете, где помимо, офф документации и первичных источников, можно еще что то почитать про runloop?
Взгляните, тут, 260 страница, абзац Putting a Thread to Sleep , там есть выражение "Afterward, the thread is
made “runnable” again, and the kernel will add the thread back into its rotation of running threads.", значит ли это, что "какие-то" манипуляции с потоком происходят?
Большое спасибо, за подробный ответ) А что происходит с потоком когда на "поле тишина"?) Ведь мы знаем, что держать "впустую" поток в ядре плохо, тогда есть ли смысл в словах - ядро автоматически переводит поток в пулл спящих потоков(высвобождает память итп), когда видит, что он не выполняет никакой работы?
Я понимаю, что это очень низкоуровневая инженерия, но если говорить простым языком)
если говорить простым языком то, у нас есть метод func CFRunLoopWakeUp(CFRunLoop!), тогда в какой момент происходит "CFRunloopSleep" и что происходит в этот момент с потоком?
в надежде получить это: